{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CCGANs - Context-Conditional Generative Adversarial Networks\n",
    "\n",
    "Brief introduction to Context-Conditional Generative Adversarial Networks or CCGANs. This notebook is organized as follows:\n",
    "\n",
    "1. **Research Paper**\n",
    "* **Background**\n",
    "* **Definition**\n",
    "* **Training CCGANs with MNIST dataset, Keras and TensorFlow**\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Research Paper\n",
    "\n",
    "* [Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks](https://arxiv.org/pdf/1611.06430.pdf)\n",
    "\n",
    "## 2. Background\n",
    "\n",
    "**Generative adversarial nets** consists of two models: a generative model $G$ that captures the data distribution, and a discriminative model $D$ that estimates the probability that a sample came from the training data rather than $G$.\n",
    "\n",
    "The generator distribution $p_g$ over data data $x$, the generator builds a mapping function from a prior noise distribution $p_z(z)$ to data space as $G(z;\\theta_g)$.\n",
    "\n",
    "The discriminator, $D(x;\\theta_d)$, outputs a single scalar representing the probability that $x$ came form training data rather than $p_g$.\n",
    "\n",
    "The value function $V(G,D)$:\n",
    "\n",
    "$$ \\underset{G}{min} \\: \\underset{D}{max} \\; V_{GAN}(D,G) = \\mathbb{E}_{x\\sim p_{data}(x)}[log D(x)] + \\mathbb{E}_{z\\sim p_{z}(z)}[log(1 - D(G(z)))]$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Definition\n",
    "\n",
    "Context-Conditional Generative Adversarial Networks (CC-GANs) are conditional GANs where the generator is trained to fill in a missing image patch and the generator and discriminator are conditioned on the surrounding pixels.\n",
    "\n",
    "CC-GANs address a different task: determining if a part of an image is real or fake given the surrounding context.\n",
    "\n",
    "The generator $G$ receives as input an image with a randomly masked out patch. The generator outputs an entire image.  We fill in the missing patch from the generated output and then pass the completed image into $D$.\n",
    "\n",
    "### Network Design\n",
    "\n",
    "<img src=\"../../img/network_design_cc_gan.png\" width=\"600\"> \n",
    "\n",
    "\n",
    "### Cost Funcion\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "    \\underset{G}{min} \\: \\underset{D}{max} \\; V_{CCGAN}(D,G) =& \\mathbb{E}_{x\\sim \\mathcal{X}}[log D(x)] + \\mathbb{E}_{x\\sim \\mathcal{X}, m\\sim \\mathcal{M}}[log(1 - D(x_I))] \\\\\n",
    "    x_I =& (1 - m) \\bigodot x_G + m \\bigodot x \\\\\n",
    "    x_G =& G(m \\bigodot x, z)\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Training CCGANs with MINIST dataset, Keras and TensorFlow\n",
    "\n",
    "CCGANs implementation using \"U-net\" model and convolutional neural network and the [Keras](https://keras.io/) library.\n",
    "\n",
    "* **Data**\n",
    "    * Rescale the MNIST images to be between -1 and 1.\n",
    "    * Resize 32x32\n",
    "    \n",
    "* **Generator**\n",
    "    * **U-net network**.\n",
    "    * The input to the generator is the **normal distribution** $z$.\n",
    "    * The last activation is **tanh**.\n",
    "    \n",
    "* **Discriminator**\n",
    "    * **Convolutional neural network** and **LeakyReLU activation**.\n",
    "    * The last activation is **softmax**.\n",
    "    \n",
    "* **Loss**\n",
    "    * Discriminator: loss=['mse', 'categorical_crossentropy'].\n",
    "    * Adversarial: loss=['mse']\n",
    "\n",
    "* **Optimizer**\n",
    "    * Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "* batch_size = 64\n",
    "* epochs = 100\n",
    "\n",
    "### 1. Load data\n",
    "\n",
    "#### Load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:03.403650Z",
     "start_time": "2018-08-06T17:31:03.048479Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:05.131598Z",
     "start_time": "2018-08-06T17:31:03.405648Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Dense, LeakyReLU, BatchNormalization\n",
    "from keras.layers import Input, Flatten, Embedding, multiply, Dropout\n",
    "from keras.optimizers import Adam\n",
    "from keras import initializers\n",
    "\n",
    "from keras_contrib.layers.normalization import InstanceNormalization\n",
    "from keras.layers import Concatenate, GaussianNoise\n",
    "from keras.layers.convolutional import UpSampling2D, Conv2D\n",
    "from keras import losses\n",
    "from keras.utils import to_categorical\n",
    "import keras.backend as K\n",
    "\n",
    "# from scipy.misc import imresize\n",
    "from skimage.transform import resize"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Getting the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:05.716705Z",
     "start_time": "2018-08-06T17:31:05.133812Z"
    }
   },
   "outputs": [],
   "source": [
    "# load dataset\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Explore visual data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:06.159238Z",
     "start_time": "2018-08-06T17:31:05.718782Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Z86cCeSelMJW0zbbbAPkj0W14ImqVTjiiCMAOPPMM4HCT7HFtMLr1VprrQXkyglg2223BWDjjTee7+tWXXXV9PjEE08sT+Yi07lzZyD33dp///3Tc94qX2211YD871ux37MePXoAcMstt6Rpf/zjHwGYMWNGkbmuLG9B+t+vhx9+uJrZSW211VYAvPbaaxV5P7WgREQkSqqgREQkSlF28S211FLp8RZbbAHA4MGDgfwukUI+/PBDAAYMGADA/fffn54bM2YMkBvwB7jssstKkOP6teaaawKw5JJLVjkn8dhwww3TY+8yOvjggwFo27Ztes4sMwb82WefpWneBb3RRhsBcMABB6TnfELA+++/X45sR8N/57p161aR9/OlJwB33HEHkPtbECufeLTeeusB1e3i825XgLXXXhvI/V2A3Pe8LO9dtjuLiIi0QJQtqFtvvTU97tOnT1Gv9RaXT+0Npz37U8kmm2zSwhzWt65du6bHffv2zTsXPt13794dgP/85z+VyViV+GScK664AoDevXun53wqeSHemt99993TNJ9G7eW44oorpufC43r23HPPAYVbUP/973+BXEsnfHovNEFnu+22A3JTneuFt/r+8Y9/VDkn+b1WRx99NJDr0YLytvjVghIRkSipghIRkShF1cXnsfV8tT00HoALu+wee+wxAK688so07csvvwTgzTffBGDq1KnpuZ133rngPSVj++23B+DOO+9M07x7yw0cODA9njhxYmUyVmU9e/YE4He/+91Cr/3444/T41133RXInySx7rrrljh3tefmm28G4JFHHml0bu7cuQBMmjSpSffyKDJvv/02kFs/FQrf5/XXXy8us1USdm1W2+23394ozbuvyy2eUhAREQlE0YLy+Ho+eBrG1vPV40899RSQP2nCB0bDaeNe23/99dcAjBs3Lj3ng6xhC80nVSjSORx++OFA4afQkSNHArko8a1JGOmgoQkTJgC5lfVhJImw5eR8enlrNm/ePKBw+RTLJ6Asv/zy873m888/T49LHO+wpMLJWx07dqxiTvI17EWB3N/qclMLSkREolS1FlQYwfj0008HcjX15MmT03NfffUVAHfffTcAs2bNSs898cQTef82VbiY8tRTTwVyCy1bm3Bq829/+1sgfzrvtGnTALj44osrm7GI+NTaY445BoBnn302PffRRx8BuenRCxPTk3GtCqOT+/+b8He6oX79+pU9T6UQTrtf0OepFP+u+uLc0BdffFGRPKgFJSIiUVIFJSIiUap4F98SSywB5E8N96atxykLY2f5tNByNXnXWGONstw3dr49RLh9SSGDBg0C4IUXXih3lqLlSxf69+/f4nv5FhzSNGHX+1lnnQXkT9X3yByFvPXWW0Bu6nrsNthgg0Zp77zzThVykuF/o8Nu6Q8++ADI/a0uN7WgREQkShVvQW2++eZA4Thce++9N9D8bcOl6fbYYw+gcFzCv//97+nxddddV7E81TLfbHDppZde4HU///nP8/775ZdfTo9jiLtWCd56P/TQQ4H82I8N+eJxWPCGhb4BobeyAJ588kkA5syZ0+y8Vlu5Nwb0JT3+9wDgkEMOAWC33XZrdP1FF10E5CZPlZtaUCIiEqWKt6CuvvpqID/ckLeYyt1y8vAhhaIitxb77LMPAJdffnmjcy+99BKQW7ALMH369MpkrAb4PmWdOnVK0/70pz8BhXsEFvR983GtI488Mk374YcfSpfZyITb3j/66KNAacd/R48eDcBtt91WsnvGoEOHDk26btNNNwVyf1fDVunqq68OwOKLLw7kj+v5dzRsZb766qtAblHzoovmqomxY8cW9wFaSC0oERGJkiooERGJUkW6+HxjO8jF3QsHPL3JX27e1RK+t09FrWc+KA0Lnlb+ySefAPW/AWFThNOXfWKPl124gZt3jXiXXTjRwQeevWsw5N0m++67b5rmE1K+//77ln+AiHk3VFN2FVjYhoXO/8bsueeeaZrH76wVYTeb/4265ZZbADjnnHMW+Fqf7ORl6vEOAb755hsA3n33XQD+8pe/pOd8GU84vOK//x7DMFziU87NCQtRC0pERKJUkRZUWAP7QF0Yu+yBBx4o+Xv6guBCiytHjBiRHp999tklf+/YhBG2F/QUWmjiRGvj389w2u2wYcPyrrngggvSY/8ujRkzBsgf1PZz4QQBt9JKKwFw2WWXpWmffvopkL9/UczRt4vh+zUB7LTTTkBuOvMzzzyTnvv2228Xeq+jjjoqPe7bt2+Jclh9xx9/fHrse635lvYL0/C7895776XnXnnllaLy4TEn/TvqPSvVoBaUiIhESRWUiIhEqWrbbYRdF76lRil4155vYuhbeUBu0O+qq65K08LtO+qNT0gptCLcDR8+PD0eP3582fMUo3BChHffhd8b54PuHp8QcivqvTvEoxdALmpEOOlhwIABQK7bz6OnAAwZMgSA559/Pk274oorAJg6dWqj/NTqBB/vvrrkkkua9fqw276euvhC/v+9GnbZZZe8/15YvM5yUgtKRESiVLUWVCmnlntLAXJPvr179wbyWwi9evUq2XvWAt9Yr9B22D5wesQRR1QyS1Fp06YNkIsvBnDaaacBMHv27DTN47vdf//9QH4csi5dugBwww03ALkp6QAffvghAMcdd1ya5lHhPQZaOAjuK/x79OiRpjXcWjvcJr3QRnKtgW/zLpXx8MMPV+291YISEZEoVaQFFS7I82OPCQdw0kknNeu+J598MgDnn39+mubbxnt/fri3VGuzwgorAIWnlt90001AfY/BLYxPp/VWE+QWNR577LFpmrdEt9lmGyA/fp4vDPWlFBdeeGF67s477wTyWz3Oo28//fTTaZof9+nTJ0076KCD8l7n3/mYhWN6Pv4ZLu1obnRxL3dF2G891IISEZEoqYISEZEoVaSLL4x958errLJKmnb99dcDuRhRU6ZMSc95t4pvbuZh5SEXRt5XUUNuVbp3YbVG3rUUxjFrKNwor7Xq169fozSfOBFOM/dpzeFW4w35NWFkiOZunzF06NCCx7HzzQXPPffcNG3XXXcF8id0FOrybMgjcoTbmPhWPYViG3q3YVMiUUjT+HDM+uuvn6YVG5WipdSCEhGRKFVtmrk/qUIuBpVPA/cBZID11ltvvvfwVoBP3YXCT8WtQTjV3jcr88kR4ULRG2+8EVDEcoBJkyYBuUW2kFvoHbbUnS/CffHFF9M0j302YcIEoL43HVwYn2pfKPbgGWeckR7PnDlzoffyltcWW2yRphXa8n3kyJEA3HzzzUD+3wJpGS/vBfXElJtaUCIiEiVVUCIiEqWKdPGFm7i99tprAGy11VaNrvOJEx07dmx0zidO+Gp+aP76qXq03HLLpcfhBBSAL774Ij0O1/y0djvssAOQvybPu5TC7WB88o7Hw6v3DQXLIYym0Vz+/+Sxxx5L0/xvgCZHlM+2226bHt91110VfW+1oEREJEoVaUF5FHHIbXEdrtT3yOOF+KpxHwT96KOPypFFaYV8sP7ee+9N08JjKY7HdQwjjB9++OFF3ePjjz8GchE9Ro8enZ677bbbgPzND6V8wghA1aIWlIiIRKni08x976dwT5dC27JLcd5///302Kff+8JJkUrw/anCrcv/+c9/AnDxxRenaR5d36fohxHbffcBXwIglef7nu2///5VzolaUCIiEilVUCIiEiUrtDp7vhebNf3iOpckSYtHEFWeOSrPkhubJEmXltxA5ZmnxeUJKtNQU37n1YISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoFRtJYjIwsRwZqTFrlug+Ks8MlWfplaJMVZ45+o6WVpPKs6h1UCIiIpWiLj4REYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYlSVSsoM+tvZoOrmYd6ovIsPZVpaak8S6vey7PsFZSZHWRmr5vZLDP7ysyeMrPty/2+88nLBDObk83LLDN7thr5aImYyjObn5PM7N9mNtvM3jOz9auVl+aKpUzNbI3gu+k/iZmdWum8tEQs5ZnNy2ZmNtrMppvZ52bWrxr5aInIynM7M/unmc00s/8rdz7KWkGZ2SnAtcClQEdgDeAmYO9yvu9C/CZJknbZn92qmI+ixVaeZvY74ChgL6Ad0B2YXI28NFdMZZokyafBd7Md8HPgR+ChSueluWIqz6z7gBeBDsCOwHFm1qNKeSlaTOVpZh2AR4GBwHLAAOAxM1u+bG+aJElZfoBlgVnA/gu4pj8wOPjvvwGTgOlkvlSdg3PdgHeBmcAXwGnZ9BWBx4FpwP+A0cAi83m/CUDXcn3mcv7EVp5kHm4+A3apdtnUS5kWeO8/AS9Uu5xquTyBb4BODd7v7GqXVS2WJ5kH0HcapH0AHFWuMihnC2pbYEng4SJe8xSwHrAy8AYwJDh3B3BskiTLABsDI7LppwKfAyuRecI4B0gW8B5DzOxrM3vWzDYtIm/VFlt5rp792djMPst2811gZrU08Sa2Mm3oMODuIvJWbTGW57XAYWa2mJltkM3j80Xkr5piK0/L/jRM27iI/BWlnH9MVgAmJ0kyr6kvSJLkL0mSzEyS5DsyTwabmtmy2dNzgU5m1j5JkqlJkrwRpK8KrJkkydwkSUYn2aq9gIOBtYA1gReAZ8xsuaI/WXXEVp6rZ//djUxX1K+BPmS6/GpFbGWaMrNfkflj8WCRn6maYizPx4H9gDnA+8AdSZK8VvxHq4rYyvNlYDUz65Ot8A8HfgYs1czPt1DlrKCmACua2aJNudjM2pjZ5Wb2sZnNINMdB5nmJ0AvMk3UiWY2ysy2zaYPBD4CnjWzT8zsrPm9R5IkY5IkmZMkyTdJklxGpkn7q+I/WlXEVp5zsv8OSJJkWpIkE4Bbs/esFbGVaehw4KEkSWY19cNEIKryzI6ZPA1cSKYl8lNgdzM7vhmfrRqiKs8kSaaQGfs6BfgPsAeZ1ujnxX+0JipX3yG5/tP9FnBNf7L9p8ChwHvA2mSajcuRaWau2+A1iwEnA58VuF9n4L80cVwk+349ylUG9VyeZJ6avgN2CNJOBR6udlnVapkG17QlM4awc7XLqJbLE+gCTG2Q9kfg8WqXVS2WZ4FrFwUmAruXqwzK1oJKkmQ60A+40cz2MbOlss3CPc1sQIGXLEPmD94UMn/8LvUTZra4mR1sZssmSTIXmAH8kD3X3czWNTML0n9oeHPLTOH9ZfZeS5rZ6WSeLMaU9pOXR2zlmSTJN8ADwBlmtoyZrQ4cTaZLpSbEVqaBnmRa9y+U4GNWTITl+UHmcjvIzBYxs1WA3sC40n3q8omwPDGzzbN5aA9cCXyeJMkzpfvUDVTgKeBg4HVgNpnZJU8A2xWo/dsBw8nMMJlIZoA4AdYFFifTVJ9KpgBfA7bPvu5kMk3Z2WSamufPJx+dgf/LXjcF+DvQpdpPSbVantlr2wP3Z9/jMzK/TFbtMqrlMs1e/wxwUbXLpR7KE9g5+9rp2bz8GViq2mVUw+U5NFuW08k8oK5czs9u2TcVERGJSi1NCRYRkVZEFZSIiERJFZSIiERJFZSIiERJFZSIiESpSSuUnZlpyl9WkiQNY1IVTeWZo/IsuclJkqzUkhuoPPO0uDxBZRpqyu+8WlAi9WlitTNQZ1SeVaAKSkREoqQKSkREolTUGJS0Duuvn9u1/emnnwagTZs2AKy55ppVyZOItD5qQYmISJTUgpLUoEGDAOjdu3ea1qFDBwAef7xmgpSLSJ1QC0pERKKkCkpERKKkLr5WqmPHjgAMGzYsTdtmm20ACLdgefvttwE46qijKpg7ERG1oEREJFLRt6B8evOyyy4732tOOOGE9HippZYCYIMNNgDgD3/4Q3ruyiuvBKBPnz5p2rfffgvA5ZdfDsAFF1xQimxHy6eQe1n84he/aHTN2WefnR6//vrrAEyZMqUCuRNpmaWXXjo9HjlyJACrrbZamvbLX/4SgAkTJlQyW9JMakGJiEiUqtaCWmONNdLjxRdfHIDtttsOgO233z49t9xyywHQq1evou7/+eefA3D99denaT179gRg5syZadq4ceMAGDVqVFH3r1U+bbxbt27zvcbLDuCFF14oe55EmsJbQiut1Dhm69SpUwH49a9/naZtueWWAIwfPz5NU09AbVELSkREoqQKSkREolTxLr7NNtsMgBEjRqRpC5oAUawff/wRgPPOOw+AWbNmpeeGDBkCwFdffZWmeddA2A1Qb8LYevfddx8AZo23Ytl3330BGD58eGUyVudOPfVUINeFDbDRRhsBcPDBBze6/v333wegc+fOFchdPDbeeOP0+MQTTwQKx3z073E4POB8klOnTp3SNP+Of/HFF2la+P+itfCJUIcccggAO+64Y3qu0HfttNNOA+DLL78E8odcBg8eDMCrr75answ2oBaUiIhEqeItqE8//RTIH6wspgUV1tzTpk0D8gdGv//+ewDuvffeFuWznhx66KHpsT99PvnkkwD8/ve/T8+FT5rSNP406q2A8OnUJ+UUaq2Gi6HdeuutB8C7776bpoUtgnq18847p8cLWhD+3XffAbmn+PC1Z511VqPrvYzvuuuuNK21TJII42led911AKy44opA/vfRp+KHE08GDhyYd6/wer/uwAMPLG2G50MtKBERiZIqKBERiVLFu/j+97//AXD66aenad27dwfgzTffBPLXLrm33noLgF133TVNmz17NpA/0HfSSSeVOMe16+WXXwZyE1Mgt4L+5JNPBtStNz+rrrpqejx06FAA1llnnUbXefe0RzAIu0PGjh0LwBZbbNGk91xkkUXy7lXv+vfvD+T/LXB33303AF9//XWa5tFPwjT/bj/zzDNArhsrvO7BBx8sYa7jtOiimT/lXbp0AeDPf/5zes6j67z44osAXHTRRem5l156CYAlllgiTfvrX/8KwG677dbofTyyTKWoBSUiIlGqWiSJRx55JD32Kece4WHTTTdNz/mgqT89easp9M4776THxxxzTOkzW2P23ntvIDe9NByQ/9vf/gbkYhBKvq5duwL5T6A//elPm/z6cFLD5MmTgfyneo+GcOeddwKw+uqrN7pHOEminnlLsW3btmnaxIkTATj33HOB/CUhbt11102PzznnHCA3eB/+ffAWWmv4rvsU8ttvv73Rueeeew7ITZyYMWNGo2vCSRUNW05hZBlv2VaKWlAiIhKlKKKZN6zRp0+f3uiao48+GoAHHnggTfNFuZKLWQjwq1/9ar7X+cLk8KloQXxMr1Arwhf01ZMzzjgDWHCryac7A5x55pkAvPLKK0DhBd/h1GYvz0ItJx8fDJcF1DMfG9pjjz3SNG+B+sLb448/Pj3n431XX311mrbXXnsBubHtSy65JD138803lyPb0QjHkrwl6b0lN910U3rOgxYUajk5b7EW4ounIX/8rxLUghIRkSipghIRkShF0cXXkA9uQi5kvq/Q90FsgGeffbai+YrZDz/8kB57mfm05bAr1KeaFuJTz0N9+/YFCsdG81hzYXdVLU5bDweFfdv7QjwKStgFN2bMmKLeq1DXnvMYiD65ot750hHvHoVcF59HiAiXlVxzzTVA4Vh8vtHooEGDypPZiPTr1w/IdetBLoKOT7f3rmeAOXPm5L1+ySWXTI/9ux+WqS+VuPjii4HqxuZUC0pERKIUZQsqnCrqkyPeeOMNIH/6r2+mFy4eu/HGG4HCsc7qWRgDzidJeMvJn/yh8dN5uIjXX9ejR49G9/f/J+Hkig022ADIXwjpMbp8unAt8JYg5BY1hnzBsz+lN7XVtPzyywP5kwB22GGHgveGXHzE1sInmxQavPfp+A899FCa5k/24e/2HXfcAeQvW6lH4SQonzgSloO3nPbZZ5/53sOn5/uuDpDrbQn57/OAAQNakOPSUAtKRESiFGULKvTxxx8DcMQRRwC5BY6QGwsIxwR88d8999wDFF7oV0+WWWYZANZee+1G53w/lzCy+0cffQTk9tYJw8z4At+wleXjfFdddRWQH3neF1iXcj+varjtttvSY19UGy51OOiggwCYNGlSUff1SPHhdGDni8sPOOCA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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i+1)\n",
    "    x_y = X_train[y_train == i]\n",
    "    plt.imshow(x_y[0], cmap='gray', interpolation='none')\n",
    "    plt.title(\"Class %d\" % (i))\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    \n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Reshaping and normalizing the inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:06.583614Z",
     "start_time": "2018-08-06T17:31:06.161237Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape (60000, 28, 28)\n",
      "y_train.shape (60000,)\n",
      "X_train reshape: (60000, 28, 28, 1)\n",
      "y_train reshape: (60000, 11)\n"
     ]
    }
   ],
   "source": [
    "print('X_train.shape', X_train.shape)\n",
    "print('y_train.shape', y_train.shape)\n",
    "\n",
    "if K.image_data_format() == 'channels_first':\n",
    "    X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)\n",
    "    input_shape = (1, 28, 28)\n",
    "else:\n",
    "    X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)\n",
    "    input_shape = (28, 28, 1)\n",
    "\n",
    "# the generator is using tanh activation, for which we need to preprocess \n",
    "# the image data into the range between -1 and 1.\n",
    "\n",
    "X_train = np.float32(X_train)\n",
    "X_train = (X_train / 255 - 0.5) * 2\n",
    "X_train = np.clip(X_train, -1, 1)\n",
    "\n",
    "# y to categorical\n",
    "num_classes = 10\n",
    "y_train = to_categorical(y_train, num_classes=num_classes+1)\n",
    "\n",
    "print('X_train reshape:', X_train.shape)\n",
    "print('y_train reshape:', y_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:28.833217Z",
     "start_time": "2018-08-06T17:31:06.586070Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ariza/.conda/envs/generative/lib/python3.6/site-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.\n",
      "  warn(\"The default mode, 'constant', will be changed to 'reflect' in \"\n",
      "/home/ariza/.conda/envs/generative/lib/python3.6/site-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.\n",
      "  warn(\"Anti-aliasing will be enabled by default in skimage 0.15 to \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train reshape: (60000, 32, 32, 1)\n"
     ]
    }
   ],
   "source": [
    "X_train = resize(X_train, [X_train.shape[0], 32, 32, 1])\n",
    "print('X_train reshape:', X_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Define model\n",
    "\n",
    "#### Generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:29.941228Z",
     "start_time": "2018-08-06T17:31:28.835729Z"
    }
   },
   "outputs": [],
   "source": [
    "# Number of filters in first layer of generator\n",
    "gf = 32\n",
    "k = 4\n",
    "s = 2\n",
    "\n",
    "# imagem shape 28x28x1\n",
    "img_shape = X_train[0].shape\n",
    "\n",
    "# Generator input\n",
    "img_g = Input(shape=(img_shape))\n",
    "\n",
    "# Downsampling\n",
    "d1 = Conv2D(gf, kernel_size=k, strides=s, padding='same')(img_g)\n",
    "d1 = LeakyReLU(alpha=0.2)(d1)\n",
    "\n",
    "d2 = Conv2D(gf*2, kernel_size=k, strides=s, padding='same')(d1)\n",
    "d2 = LeakyReLU(alpha=0.2)(d2)\n",
    "d2 = BatchNormalization(momentum=0.8)(d2)\n",
    "\n",
    "d3 = Conv2D(gf*4, kernel_size=k, strides=s, padding='same')(d2)\n",
    "d3 = LeakyReLU(alpha=0.2)(d3)\n",
    "d3 = BatchNormalization(momentum=0.8)(d3)\n",
    "\n",
    "d4 = Conv2D(gf*8, kernel_size=k, strides=s, padding='same')(d3)\n",
    "d4 = LeakyReLU(alpha=0.2)(d4)\n",
    "d4 = BatchNormalization(momentum=0.8)(d4)\n",
    "\n",
    "# Upsampling\n",
    "u1 = UpSampling2D(size=2)(d4)\n",
    "u1 = Conv2D(gf*4, kernel_size=k, strides=1, padding='same', activation='relu')(u1)\n",
    "u1 = BatchNormalization(momentum=0.8)(u1)\n",
    "\n",
    "u2 = Concatenate()([u1, d3])\n",
    "u2 = UpSampling2D(size=2)(u2)\n",
    "u2 = Conv2D(gf*2, kernel_size=k, strides=1, padding='same', activation='relu')(u2)\n",
    "u2 = BatchNormalization(momentum=0.8)(u2)\n",
    "\n",
    "u3 = Concatenate()([u2, d2])\n",
    "u3 = UpSampling2D(size=2)(u3)\n",
    "u3 = Conv2D(gf, kernel_size=k, strides=1, padding='same', activation='relu')(u3)\n",
    "u3 = BatchNormalization(momentum=0.8)(u3)\n",
    "\n",
    "u4 = Concatenate()([u3, d1])\n",
    "u4 = UpSampling2D(size=2)(u4)\n",
    "u4 = Conv2D(1, kernel_size=4, strides=1, padding='same', activation='tanh')(u4)\n",
    "\n",
    "generator = Model(img_g, u4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Generator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:29.951429Z",
     "start_time": "2018-08-06T17:31:29.943419Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_1 (InputLayer)            (None, 32, 32, 1)    0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_1 (Conv2D)               (None, 16, 16, 32)   544         input_1[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)       (None, 16, 16, 32)   0           conv2d_1[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_2 (Conv2D)               (None, 8, 8, 64)     32832       leaky_re_lu_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)       (None, 8, 8, 64)     0           conv2d_2[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_1 (BatchNor (None, 8, 8, 64)     256         leaky_re_lu_2[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_3 (Conv2D)               (None, 4, 4, 128)    131200      batch_normalization_1[0][0]      \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_3 (LeakyReLU)       (None, 4, 4, 128)    0           conv2d_3[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_2 (BatchNor (None, 4, 4, 128)    512         leaky_re_lu_3[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_4 (Conv2D)               (None, 2, 2, 256)    524544      batch_normalization_2[0][0]      \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_4 (LeakyReLU)       (None, 2, 2, 256)    0           conv2d_4[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_3 (BatchNor (None, 2, 2, 256)    1024        leaky_re_lu_4[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "up_sampling2d_1 (UpSampling2D)  (None, 4, 4, 256)    0           batch_normalization_3[0][0]      \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_5 (Conv2D)               (None, 4, 4, 128)    524416      up_sampling2d_1[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_4 (BatchNor (None, 4, 4, 128)    512         conv2d_5[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_1 (Concatenate)     (None, 4, 4, 256)    0           batch_normalization_4[0][0]      \n",
      "                                                                 batch_normalization_2[0][0]      \n",
      "__________________________________________________________________________________________________\n",
      "up_sampling2d_2 (UpSampling2D)  (None, 8, 8, 256)    0           concatenate_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_6 (Conv2D)               (None, 8, 8, 64)     262208      up_sampling2d_2[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_5 (BatchNor (None, 8, 8, 64)     256         conv2d_6[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_2 (Concatenate)     (None, 8, 8, 128)    0           batch_normalization_5[0][0]      \n",
      "                                                                 batch_normalization_1[0][0]      \n",
      "__________________________________________________________________________________________________\n",
      "up_sampling2d_3 (UpSampling2D)  (None, 16, 16, 128)  0           concatenate_2[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_7 (Conv2D)               (None, 16, 16, 32)   65568       up_sampling2d_3[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_6 (BatchNor (None, 16, 16, 32)   128         conv2d_7[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_3 (Concatenate)     (None, 16, 16, 64)   0           batch_normalization_6[0][0]      \n",
      "                                                                 leaky_re_lu_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "up_sampling2d_4 (UpSampling2D)  (None, 32, 32, 64)   0           concatenate_3[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_8 (Conv2D)               (None, 32, 32, 1)    1025        up_sampling2d_4[0][0]            \n",
      "==================================================================================================\n",
      "Total params: 1,545,025\n",
      "Trainable params: 1,543,681\n",
      "Non-trainable params: 1,344\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "generator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.106450Z",
     "start_time": "2018-08-06T17:31:29.953950Z"
    }
   },
   "outputs": [],
   "source": [
    "# Discriminator network\n",
    "k = 4\n",
    "\n",
    "discriminator = Sequential()\n",
    "discriminator.add(Conv2D(64, kernel_size=k, strides=2, padding='same', input_shape=img_shape))\n",
    "discriminator.add(LeakyReLU(alpha=0.8))\n",
    "discriminator.add(Conv2D(128, kernel_size=k, strides=2, padding='same'))\n",
    "discriminator.add(LeakyReLU(alpha=0.2))\n",
    "discriminator.add(InstanceNormalization())\n",
    "discriminator.add(Conv2D(256, kernel_size=k, strides=2, padding='same'))\n",
    "discriminator.add(LeakyReLU(alpha=0.2))\n",
    "discriminator.add(InstanceNormalization())\n",
    "\n",
    "img_d = Input(shape=img_shape)\n",
    "features = discriminator(img_d)\n",
    "\n",
    "validity = Conv2D(1, kernel_size=k, strides=1, padding='same')(features)\n",
    "# validity = Flatten()(validity)\n",
    "# validity = Dense(1, activation='sigmoid')(validity)\n",
    "\n",
    "label = Flatten()(features)\n",
    "label = Dense(num_classes+1, activation=\"softmax\")(label)\n",
    "\n",
    "discriminator = Model(img_d, [validity, label])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.115318Z",
     "start_time": "2018-08-06T17:31:30.108486Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_2 (InputLayer)            (None, 32, 32, 1)    0                                            \n",
      "__________________________________________________________________________________________________\n",
      "sequential_1 (Sequential)       (None, 4, 4, 256)    656836      input_2[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "flatten_1 (Flatten)             (None, 4096)         0           sequential_1[1][0]               \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_12 (Conv2D)              (None, 4, 4, 1)      4097        sequential_1[1][0]               \n",
      "__________________________________________________________________________________________________\n",
      "dense_1 (Dense)                 (None, 11)           45067       flatten_1[0][0]                  \n",
      "==================================================================================================\n",
      "Total params: 706,000\n",
      "Trainable params: 706,000\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "discriminator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Compile model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Compile discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.167853Z",
     "start_time": "2018-08-06T17:31:30.117566Z"
    }
   },
   "outputs": [],
   "source": [
    "# Optimizer\n",
    "optimizer = Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "discriminator.compile(optimizer=optimizer, loss=['mse', 'categorical_crossentropy'],\n",
    "                      loss_weights=[0.5, 0.5], metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Combined network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.728960Z",
     "start_time": "2018-08-06T17:31:30.169843Z"
    }
   },
   "outputs": [],
   "source": [
    "# The generator takes noise as input and generates imgs\n",
    "masked_img = Input(shape=(img_shape))\n",
    "gen_img = generator(masked_img)\n",
    "\n",
    "# For the combined model we will only train the generator\n",
    "discriminator.trainable = False\n",
    "\n",
    "validity, _ = discriminator(gen_img)\n",
    "\n",
    "d_g = Model(masked_img, validity)\n",
    "\n",
    "d_g.compile(optimizer=optimizer, loss='mse', metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.736364Z",
     "start_time": "2018-08-06T17:31:30.731183Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_3 (InputLayer)         (None, 32, 32, 1)         0         \n",
      "_________________________________________________________________\n",
      "model_1 (Model)              (None, 32, 32, 1)         1545025   \n",
      "_________________________________________________________________\n",
      "model_2 (Model)              [(None, 4, 4, 1), (None,  706000    \n",
      "=================================================================\n",
      "Total params: 2,251,025\n",
      "Trainable params: 1,543,681\n",
      "Non-trainable params: 707,344\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "d_g.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:30.743590Z",
     "start_time": "2018-08-06T17:31:30.738902Z"
    }
   },
   "outputs": [],
   "source": [
    "def mask_randomly(imgs, mask_width=10, mask_height=10):\n",
    "    y1 = np.random.randint(0, imgs.shape[1] - mask_height, imgs.shape[0])\n",
    "    y2 = y1 + mask_height\n",
    "    x1 = np.random.randint(0, imgs.shape[2] - mask_width, imgs.shape[0])\n",
    "    x2 = x1 + mask_width\n",
    "\n",
    "    masked_imgs = np.empty_like(imgs)\n",
    "    for i, img in enumerate(imgs):\n",
    "        masked_img = img.copy()\n",
    "        _y1, _y2, _x1, _x2 = y1[i], y2[i], x1[i], x2[i],\n",
    "        masked_img[_y1:_y2, _x1:_x2, :] = 0\n",
    "        masked_imgs[i] = masked_img\n",
    "\n",
    "    return masked_imgs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T17:31:31.014551Z",
     "start_time": "2018-08-06T17:31:30.746003Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(mask_randomly(X_train[0:1])[0].reshape(32, 32))\n",
    "plt.show()\n",
    "plt.imshow(mask_randomly(X_train[0:1])[0].reshape(32, 32))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Fit model\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T22:11:27.329963Z",
     "start_time": "2018-08-06T17:31:31.016456Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 1/100, d_loss=0.419, g_loss=0.205                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXecJGWdh5+Z2dmcWHZRF1BESSoSFAU5VEQRBDEgIoeKYOBEOAU9QVEJq54fA+HQO1BPz3gIHGAEDIDIKcGAApIkugssLGyADeyEvj/2vv1Wv11vd/VM9W7N7Pf5p2e6K7z11lv1/vLbU6vVMMYYY6pG74ZugDHGGJOHJyhjjDGVxBOUMcaYSuIJyhhjTCXxBGWMMaaSeIIyxhhTSTxBGWOMqSSeoIwxxlQST1DGGGMqyYRONp46dWpt9uzZ3WrLmGHZsmWsWrWqZ7THcX+uo6z+nDZtmvvz/3nwwQeX1Gq1eaM5hvszUEZ/gp95UfSZ72iCmj17NkcfffTIWzVOOO+880o5jvtzHe7P8jnllFPuH+0x3J+BMvoT3Kei6DPf0QQlTj311JHsNi7oxrXrmN08dlXpRvtOOeWU0o85VjjttNNKP6b7s3yq/lx2k06u3T4oY4wxlcQTlDHGmEriCcoYY0wlGZEPyhhjNjQveclLAHjFK14BwNOf/nQAHnroIQAuuugiAB544AEAhoeH13cTzSixBmWMMaaSbHANamOMXBtrTJ8+HYDNNtsMWBcqCzA0NATAPffcA8DKlSsBS6qmO0ybNg2APffcE4DDDjsMgH333ReAnp51aTWXXHLJBmhd99H1PeMZzwBgp512AuCZz3wmAFOmTGm5v55LaZgAf/7zn4GgZa5Zs6bEFo8ea1DGGGMqSVc0qAkTwmE32WQTIMzyksInTpzYjVObDpFUCkFT2nzzzQGYNWsWAPPnzwdg++23b/h97dq1APzyl78E4JprrgFgyZIl9WOOV21K41d+j2222aZpm4ULFwLw97//HYBVq1atp9aNfaQtzJw5s/7dS1/6UgBOOOEEAF72spcB0N/fD8ANN9wAwMUXXwzAfffdt17a2g2y70dpTLvuuisQnsPXve51QNCkZsyY0fKYehbvuOOO+nc/+9nPADj//PMBuOWWW4DqaFLWoIwxxlQST1DGGGMqSakmPqnaMucB7LPPPgC84Q1vAGCvvfYCgjnp9NNPL7MJpg0yncihuscee9R/k+lATufnPe95QAiKkDlw0qRJQAiS0D1dsGABAFdeeWX9mDL3jXVTn0sIrV/6+voA2G233erfHXfccUAw9cnEfPvttwNw3XXXAbBo0aL11s5uIbMewFFHHQXApz71KQCefPJJAFavXg0Ud5f09q7TR3bYYYf6d/pbz/Q3v/lNIJj61McbCmtQxhhjKkmpGpQcxm9961vr333iE58AgsT+1FNPAUEKMOuXyZMnA7DjjjsC8G//9m/137beemsgaMIparUaELQxaV6f/OQngaBZAVx++eUAPPHEE6Nuuxn/aEzJ4X/IIYfUf1NQhDT5q666CoBzzjkHgJ/85CfrrZ3dQpqjkpAhvEOXL18OwO9+9zsAfv/73wPw2te+FoBtt9224VjqS2lOeq6lLWU59thjG85/1llnAXDnnXeO6npGizUoY4wxlaRUDUpS8t/+9rf6d7feeisA2223HQBnnHEGAFdccQUA++23X5lNMAmmTp0KBPu97sNznvOc+jbZ9IA8pBnJ9j0wMAAEH5UkuNe//vX1fe69914gSHvGtGLOnDkAvOMd7wDg0EMPrf8mjUDvji9/+ctAo89zrLPLLrsAjc/Q/fevW4rqmGOOAYKvTaHgn//854Gg/Qj1pfx4u+++OwDvf//769vE2tRWW23V8GkNyhhjjMmhVA1qxYoVAPz85z+vf3fzzTcDIUFX2tXjjz8OWINaX8i/pIgg+Y2y/ib5lmKUcCqbvxJzJcF99rOfBUL05gEHHFDfV8m7Y1WD2nTTTTd0EzYKpOHvvPPOAPVVZxXtC6FEz3e/+10Arr32WiBo8uOBv/71r0Dw50Lw3yvhWyXFRCqpVhYtRdJef/31QNBEAd7+9rcDYZzLX6XPDU01WmGMMcZElKpBKddF0SYQtCoVFJW0k5LWN2a6WeRW0XvSZGV7zkpTQhGWioq69NJLgeBPzBabBPjiF78IBKlPpZCgsZTSWES+U9MdNC7lG/3whz8MBN9oVpLXu+Thhx8GmjWJ8YDKYcnvNBrkM1a/6Z2raEho1FCriDUoY4wxlaTry21o1t7QGckbG7Jbq5Ck8knki8pD+RW//vWvgVBI8k9/+hPQLLEqauiPf/wjMD6LoapKhukO0rb33ntvIPS3IkofeeSR+rYXXHABUI52sTGhPlY+ld4J0FyF4tFHH2343NBYgzLGGFNJNviChaZc5FtSJrqidFSaf+7cuQAMDg4CIcoS4Bvf+AYQovQefPBBoHiUlLTl8eBflO/shS98IdCY22dGj8bpC17wAqC5RqcsLt///vfr+2hJiPFQa68btPNhL168GIB//dd/bXss5WH94Q9/GHW7RoM1KGOMMZXEGtQ4Q5noRxxxBBBykqQ5qRbi3XffDcB//Md/1Pf94Q9/CMBjjz0GtNeEFGG15ZZbAuNrEUpVk1a/WYMqF1U5kIaq2pAac4oEllYPoSrJeMp7Gg2q4CItdDxiDcoYY0wl2eAalOymqkKgSgeqF6W8HeVYZe3Pqk7w05/+FAjRZvPmzQOCJjDW1yIqgmz3Rx55JBDW35KUJc3prrvuAoJk+p3vfKd+DG3TjrjitPxbWiJ+PCDNKbvkeNmoH8eDz65TpEHpuVclA1VFyNOWdE9U/US/Sdsaj3lRrVDko9aJkgWkTJSntqGWgLcGZYwxppJscA1KaKaWVK4on9jenF1p8k1velPDp1bWlHbw7W9/Gwi5FONRUpU0qSioXXfdFYBNNtkECNF68jmpb84+++wRn1P3SivuvuIVrwCCFpfVWMeq9ro+IhJVf25jk/whPOexhqpK+bfddhvQWAvx8MMPB4K/6oEHHgDgkksuAeDqq6/uXoMryMknnwyEvKZuaFDyEd50003A+s9ntQZljDGmklRGg1KUlNY2UeVdrc6riDHZoSFErEly13pEJ5xwAhCqJnz6058Gxlf+hDSnAw88EIDPfOYzQOgD+TeU56RovazPaaQoWu/Zz342EFZSVpsk/UKomzbW0FiRH1Pj8Ktf/SoQ+lPj8fTTTwdC3hkEn96PfvQjINSXk+Sv6Edp/hsT0rrjSh3ymR522GEAvPnNb67/puoSqmCimpAaY8rZ2VhWb9azreewG2ica+2tb37zm107Vx7WoIwxxlQST1DGGGMqSWVMfHKmq0jh5ZdfDgRTn8guSy5n6cEHHwzAPvvsA4TQdIU/y7Gn5SBUfn4solDu/fffH4ATTzwRCEs0yxT629/+FghBEXKgFg0lz0MFaNXvSgVQ0ISOnV2wUkt0jDVkNrrllluAkAypa9aSBQpwkKk1uwCknPYqwquAAJn25IDemEx8SoNQgMjXvva1UR9T409BFOeee+6ojzkWUOmnbibqPv/5zwfgpJNOAoJbRe8dBbV0C2tQxhhjKkllNCghTUpaTittR+HjCrBYtmwZEBza8+fPB+DlL385ECTW6667Dggh2FUnG4oryf1DH/oQEJZuV+CCpHU5M7Vkhpz9I0Ga0+677w6EIBRpUnJa//jHPwYaw13vu+++EZ93Q6Kx8b3vfQ8I6Q1KgH7ta18LhDQI3SMt8ghBe5XTXhq+lj9QmP7GhIIitHx5mSgIRYV+x3v4vqxLxx9/PACvfvWrSz+H0n3Ut7JWKXH3jDPOALoXDGUNyhhjTCWpnAbVCZJM5SeQtCtp9i1veQsQwjDf+973AiEM+vHHHweqn8ArTRCCBL/zzjsDwech/4+SFi+77DIgSDadXKP8WApZ32OPPYCgNbzyla8Egu1/4cKFQAin1v2Asb+IocaK/Bp33HEHECRKSZgaixdeeGF93z//+c9A0G51L6SRZpPONxaUQN4NDeq5z30usPGE78tidO211wLd0aBUPk6+J41Z+fukSWWL+pZpNbEGZYwxppKMaQ0qRrO9/DCS+FU8Vv9Lo3ryySeB0UW2dRMlICuSBkKCozQnRSjK16TFBkeSlKxoIGlsKkYpyUwSqrQGLWj4X//1X0CQ5CTZjQeGhoaA4LeUBqU+khYpf8edd95Z3zcu87RkyRIgaLPqR1MOit5VIdrxjq63m8vcXHDBBUDwm+qcGv/vete7ALjmmmvq+1iDMsYYM+4ZVxqUNCFJs9Iu5FNRdI9s1JKGq6pBSVqRvwlCvpMk+xtuuAGAc845B2iU4CFE2Kk4p4pv6vvtttuuvq1yq+RfUZSZpKelS5cCQVpSFJH8M4qqVNvGI+oDfY4ElaGS5LuhlzRYn+jau4FycsZrP+o9phJu++23HxDKQ3WDSy+9FAjvhPe85z0Nv+tdqndr2ViDMsYYU0nGjAalChKtcpfkl5FEmq06AUGyl2ZV9eg92dKlNUHwW0haVMUNSY2KYFSmvrQw5YC9+MUvbjjO+973vvqxs1UQsseUP0ua05lnngmEBSNNa6St6lP9rKogKrY7VnPGqoJ80IsXL97ALekO0riPOOIIAI4++mgg+Ni/+MUvAiGaWc+vfMJ632XzwxRlm1oWR2NUvu1Yg+o21qCMMcZUkspqULK3ShPQsgZaqgDCrC+7tuyhO+ywQ8M+yvZX1JlyMNb34ludItuyJGxojgD7yEc+AsCxxx4LwHe/+10g+Ej23HNPIGTwyxclspKTJCt9pzwSRemp9tdo/C9jnXjJB2nlrTR7acK6n8qDkrarcboxaFDxAqRloiVnxlMUaRaNOb3fZCkSehfo86677gLg4osvBkLfa1kSgBtvvBFIV9044IADgPBeidE7tFsLk1qDMsYYU0kqq0EpV+ltb3sbEGrO/dM//VN9G836ismXffSQQw4Bgq1fC5udd955QJAsqq5BSRKU5gdBUpckLxuxPo877jggaFqSulL+uL/85S/1777+9a8DQZKPNc7xKpkWQf2oeoT6VNUM+QLzUDSkIqEkbaqf5TvZGPj1r38NBL9JmSxfvrz0Y1YJRRtrEUFVd4itIkLjTXU79U7IavvtIm5jv3SM/F133313y+1GijUoY4wxlaRyGpQkVUmd0gjkk9JS0BDqn73xjW8EQtVySWf33nsvEOynqlNX1bynGK2lpFwEgN122w0I0Xnya8gPp09F56jeoGrK/eY3vwGCPfqKK66oH1vRT9IstY0krqpHPXaTfffdFwiRU5I8L7roIiD4lZQzBsF3qDEsrUsavO7FeM4bi1EkqKpil8l4H596DlXVRP6hD3/4wwAcdNBBQHg36J3ZzYol1qCMMcZslFROgxKSSJ/2tKcBwW6vtU8gSBRbbLEFEKLLFLVy5ZVXAmGFV/lUuhVxUjbKdcrWuZI0Lr+bovTkY9I1qkqG/lffqNqD+iCbMzLeJdDRIE1V/a6qzgsWLACCVi7fKYTselWFl6aklXazKw9vLGjtNjNy5HtXlO2XvvQlIGjzeh9q3O20005AqEWah6Kjtf6eIktlBZD/WWu+6VO5kN2ySlmDMsYYU0k8QRljjKkklTXxKQBCJiqZVrLLZGsBOIWuyqQntfOee+4BgllrrJJdrv2qq64CgvlIi+LJISoVXdesJUXM6FAouJYfUECOylAp6VZLkkAINtE41HIkMkFnk843FhS8c8opp2zglowfZOrTp5bpkXlOBQxapUJoKRi5FRS6LtO2zIp6DvTZ7QAfa1DGGGMqSeU0KDnvFYp71llnAY3Lngs5+LVAoZJOx3MpHvWPNMxsoq3pHlrGROWepLlqXGop82wCqjQoheDedNNNDf+PlWAdM7aQ1UQBKfqU9WUsYQ3KGGNMJamcBqVQZ836X/jCFzZkc4wBgrazcOHChk9jTPewBmWMMaaSeIIyxhhTSTxBGWOMqSQj8kGdeuqpJTdj48b9WS6nnXbahm7CuML9WT5+5othDcoYY0wl6emkQGhPT8+jwP3da86Y4Vm1Wm3UK665P+u4P8tn1H3q/mzAY7RcCvVnRxOUMcYYs76wic8YY0wl8QRljDGmkniCMsYYU0k8QRljjKkknqCMMcZUEk9QxhhjKoknKGOMMZXEE5QxxphK4gnKGGNMJfEEZYwxppJ4gjLGGFNJPEEZY4ypJJ6gjDHGVBJPUMYYYyqJJyhjjDGVxBOUMcaYSuIJyhhjTCXxBGWMMaaSeIIyxhhTSTxBGWOMqSSeoIwxxlQST1DGGGMqiScoY4wxlcQTlDHGmEriCcoYY0wl8QRljDGmkniCMsYYU0k8QRljjKkknqCMMcZUEk9QxhhjKoknKGOMMZXEE5QxxphK4gnKGGNMJfEEZYwxppJ4gjLGGFNJPEEZY4ypJJ6gjDHGVBJPUMYYYyqJJyhjjDGVxBOUMcaYSuIJyhhjTCXxBGWMMaaSeIIyxhhTSTxBGWOMqSSeoIwxxlQST1DGGGMqiScoY4wxlcQTlDHGmEriCcoYY0wl8QRljDGmkniCMsYYU0k8QRljjKkknqCMMcZUkgmdbDxt2rTa7Nmz6//XarWG3/v7+wEYGBho2renpweAoaEhAHp7e3N/HxwcXNewCRNyt8+eU9voc82aNQ3H0vc6pujr68v9Pnt8nS9u58DAACtWrGD16tU9TTt3yLRp02pz5sxh7dq1Dd/H7df/2TZPnToVgOHh4YZtxerVqxt+136TJk0C4KmnngJCX2T/1m+TJ08Gwj2YOHFiwzl0zFWrVjW0KdvevPNkt+np6WHZsmWsXLmylP6cPXt2/di6l9n2QOgTaL6/MRrLcf/qGNpf58iOfT0P2iY+Vvz8xM+N9sv2XXxN8bXqXj388MNLarXavJYX14apU6fWZs+eXT+/rjm+9mx/xu2K2xc/X/o/fhbznneha1T/6hzxGNN2cX9rTGbRsbRN/O548MEHR92fANOnT69tuummTf0RX392zKbejUL9H98nbR/3T/ZcOpauX+/QeOzG71YdK+8Zi9sTv/trtRorVqxg1apVbZ/5jiaoWbNm8b73vY8FCxY0NE7kNTYeqKkHW41P0erYqQmn3YuqyHniG3HkkUdy8cUXtz1OEebPn8+ZZ57Jxz72MSBMAJttthmwrr8B5s0Lz8Xy5csBeOELX9iw7dKlSwG4+eabAbjsssuAMFFpEtH1xJMiNL9EUv2VeuGvXLmy6ff4mPEL6gMf+ADf+973cs/TKXPnzuXEE0/k+OOPB5rHVJFxEP8WtztFq9/b9WPqOYqfkbxt4xfrMcccA8CZZ555f8sGF2DevHmcdNJJfOhDHwLS/dnq2vOuIW/f1L3JO3aqf+KXqt4HGp+tjhW3V8/JscceC8CXvvSlUfcnwMyZMznyyCP57Gc/m9u2duMs20ZR9B3aitRYTH2fakt221jI1/fvf//7Of/88wu1yyY+Y4wxlaQjDaq3t5cpU6Y0qZIi/j/vN82i8bYpSabVDB4fS9vG+6aklFazf4pZs2Y1mRJGysDAAA899FBdK9pkk02AdVIWBO0na/rR3zNmzMjdVtqWVHeZM9QHkrJGI22lpL3YpJA9b8pkM23atNL6s6enh8mTJzeZnuL/W2l4sTkozwwcnzNLq3Eaj8+4T+J7kjc+U2Ndx4jNsKOlVqvVz6H2tbJMtJO020n7qWc2b5vYFD59+nQgaD+yKsTPe/bd0+7eSCsri0mTJrHVVls1uUNiM14RTSomHovxNcUm2uw28fnUh2pn/N6Ix2H23FlTXh4zZsxoa1oX1qCMMcZUko40qFqtxtq1a5MaSSvpMTWbxjNw7FgTkgyzs39eMEZ231T7UlpclpTE32qfkTBhwoQmSXDTTTcFgla0zTbb1LdftmwZAFtuuSUQpMa///3vACxcuBAITs1Y4knZmPPo1B9TRIOOmTZtWmFpqh2Dg4M89thjTeeKJbpWGlQsweZpXUX+zx4jda5Uf3aiRcRaTZ5vcaQMDw+zatWqpAbSyi+cem7ie1OkH2O0jd4Jz3/+8wHYcccdAfjd734HwBNPPAGEe9pKso+fd30q8Kcs1q5dy8KFC+v3aSQ+qJT2ktKqW42j1HMZa7jt7mseqX0GBgYKa4jWoIwxxlSSjjSovr4+Zs6c2Vbyy36fkpDkb3n6058OhBlbGoF8LNKo5s+fDzRqTfffvy6wRhLDvffeCwTbsySn2GcWS4R59vBUOG9/f38hKa8IkydPZptttqn3hSLypEnp/1122aW+z+LFi4HQT7oGhYTHUYftpPVW0nkcIRbb53UvYj9Nq2PG/z/jGc8ozc7f09PDhAkTkv7MPAk63jblG2nXb3m2eP2t0H71V9GIqFbpEKl2lOXPg3XtnzhxYpOWFkvoeT7HuH3tNIROotdkPVD067777guE98FDDz0EhGdF1oQ8q0g7i8JofLV59Pb2Mm3atKbztdKaY6uS9t9pp50AmDJlCgDPfvazgWBx0XhTf9xzzz0A3HnnnfVj/+1vf2s4b/wOT/k8Y59idoy2s5ZNmTLFPihjjDFjm441qNmzZ9cl/JRdOU+DkhQpbeF1r3sdEOzGc+fOBcJsr+223377dQ39/3Nmo5T03e233w7Av//7vwPw+9//Hgj2+FSuRawpQHNicCzRdGI/bcfQ0BDLli2rS0jyPUk7kuYkTQqCdiipSXZ2/X/44YcDcOuttwKwYsWKjtulfpX9/WlPexoQbP1LliwB4LHHHgOC5iopKqvltuurpUuXto2UK0pPTw/9/f1NkXixBpClXfvifWIJUvdOUm1WMlSEpca++ks5afIxthuf2TGvvool0FaRqSNF/RknxOq56sR/mSLl08jTzqQ5feELXwBg//33b9jnj3/8IwD33XcfkNZ+slpmKspU3+selUV/fz/z5s1rSrZN5ZhBeA6lIZ166qkAvOhFL2poq6xO2leao6wrjz76KBD6B+CMM84Agt8u5a9Lfeo6sn2aKq6QzZcs6su3BmWMMaaSeIIyxhhTSToy8Q0MDLBo0aKk+ieyJrM5c+YA8Na3vhWAd77zncA65zgEtVPqqMxZMl3F9fayYZ8yhW2++eZAc+24duHkrRI3U2bLiRMnlhYkMTAwwOLFi+vXLlOOTGpSkZ988sn6PlkHJwTTksLPtY/6tZ0JK2sSkll1jz32AELSr+7d7rvvDoRyS7pHv/zlLwH4+Mc/DrQ2pbWrwTYahoeHeeKJJ9qWOGqVDhETpwDoHsl8t8UWWwChr7LjU+NR13zTTTcBIRUgrpeYamfWfJIKhxZlBkkMDw+zevXqlkmZeW1Ifdfq+xRZ8+aZZ54JwH777QeE5+Laa68F4Fvf+hYQggFSpc+yYz7Vn/qUebYsBgcHWbp0adt3VPY+6h164oknAvDqV78aaB6bul596l2qc+h9+axnPat+bPXvL37xCwAuuugiIAScpMZmqnRd9rf4f227du1ah5kbY4wZ23SkQfX39zN//vxk6RNJ88985jPr+6jYoqRwOfM1g0qKlFQeB1NIetB2KqCaPZ9C1Z/73OcC8Nvf/hYIzvpYOmlVKTlPIshum02sHS2SUCUJKvhA2tDjjz8OBMkHgsSj7yS5a1vtG9+bVEJ0Vpr6z//8TwB23nlnoLkPdO+y9wDgec97XkObVFwUmkstxRLq8uXLSwvl7evrY9asWckk1k4kfaF91c/SLg866CAgFO1Vn0izgiDZKijitttuA+Dzn/88AL/5zW8a2plKGs6O33blm8rUoHp7e5k8eXJTf7YKGU89G50muOs4b3jDG+rfHXjggfV2Afzv//4vAB/84AeBYDWIgzhaadDtVlcoKyBK9Pf3s9lmmyXLcelzq622qu9z9tlnA+G5VFFmXefdd98NwPXXXw+Ed6bei3ouFX4uixPA3nvvDcA//MM/ALDrrrsC8N73vhcIWmq7BN28MZoaJ9kx1Q5rUMYYYypJx6WOBgYGkqGs0lgWLVpU/+7SSy8FgvSt2V2zv5aHkAYlaUASxCtf+UoAHn74YSCEpQNsvfXWDfuq3E+q1FG7kOHstinK0p50rsHBwbqkrGuPE3ZvvPHG+j5x2Lj688orrwSC/0/rdkl6FwrVPeKII4Cg4Wb3FZKEpAVJi5WWJmld2sU73vEOINwHgLPOOgsIklgs8Q8NDZUmpUojFa3WoxHtJGX9Lk3z4IMPBuAFL3gBEPpZYz+rwej+yRelMa1jXXfddUDzWjvxufO0olR7y9SgBgcHWbZsWZMvLH6uWq2vFSdyttOk5MOTj/prX/ta/Tf1p9IaPvGJTwDw4IMP5h475TfJW18r1Z/SVspCfZoqaB0XdYbg41UajVJx9Jzp2Yr7ONbO1Lc33HBD/djbbrstEJ59baP3ddb/Demk/U5SODopEG0NyhhjTCXpOIrvoYcearIxaraXFJldsfKaa64BgrQoiV/+ogceeAAISar6lBamGVxSelY6l71f55fUlRetk9feWHrJ/p2SBMssddTb28ukSZPqGqAk6V/96ldAkN6yfiL55iRF6pqUwCvNNC6kq/322msvAA499FCgeXVOCP0jv9aFF14IBB+VIgl1L7U4orQz2a8hJE9eccUVDe1VH86YMaPU5Tb6+/ubzpEnlYqi0XvyMcmeL3+HtCNp+HfccUf9GLL56/yK3lOEVErTj9uWjUZLFa/VtnmrxY6Unp6e3KTWlEUCmrXUVv7e+FwAz3nOc4AQTabkUwjXprEUa07tyk+1akuqfJPGeFnICtUuylH+aIAf/OAHQHge42i9dlppvKDo17/+9fpvp59+OhC0Sr1vZYlIvetajYF29zpbcLwd1qCMMcZUko4XLJwxY0ayGGeedCdJXp+S8OUbie308fIQinRSvkk2ukUSgY6lc0gL07niJQhazfApyVTfr1mzprQlN4aHh1mzZk39miUhSjrXeSSdQ7NmGUtTcd6Y2q/InaOOOgoIfq68hcb+8Ic/APAv//IvQCgdpfZpO7VBfhnZyLNRfrqvKf9KmXll0Kj5xrb4TnxdkigVCfXGNaneAAAXF0lEQVSqV70KCNqs+kKaq/wC8s9BiIjSsXRf4wLJqXblafMpyVX/p5agGQmp4rutfHoxKe0w1mrUr1/5yleAoEllr1OFTaUBpHx3qYgz9U3eGElZTHSOshgaGmLFihVNy7rE2nTWl6r3V7xP0fEca5KPPPJI/bdsCTcI1hFFC6sdqdzCvEVKY+Jr7CRq1xqUMcaYStJxsdhZs2Y1LQMcR/NkZ/Z4htVvsqdmbczZ7eUzkaSqLPxs4VSV01c+xC233AIEyb5dHkxeZnxKotHnqlWrStOgarV1C0DGWlDsO5Hknd2mXXUMSYTKFfvIRz4ChChISfXZqED5kk4++WSgfdFNoXupYqjbbbdd/Tf5DjVm4mssc8FCWNencf/F0npe36VyZqQByk+oT/WftHgVLFZBz+yxJAFLq1WftLvuvPEZR0/Fz1w3ltsQKf9XlqLSfdzPb37zm4GQVyakvQO8+93vBoImFfvb2kXvxtYFCJqDvouXRImjYEdLb28vU6dObRs9mn3mUtpWOzQWFJGnZ1CR0dljaozqfSz/vsZ3ain6Vm1JLXPTyRi1BmWMMaaSdKRBDQ8Ps2LFiqQPqogtOp5NJaHoc7fddgOCz0mSlchbgllS7Z/+9Ceg2BLPeW0rQpmVJFTbMI54arVoWjvtTceQRKi6XW984xsbvpeWecghh9T3VQUO3YuimqK0MEUWvuY1r6n/pqoiOm8sOS5ZsqTUenw9PT1tI4+K/Kb/5S+S1iONSr4m1SNUxF5W44jt+NI0Wy2UmdeGbNva+XTKrnzQKscpblPe+YtG773kJS8BQp9pfH70ox+tb6slZFot79MK7Ze3uF7Kp6f7XRaDg4MsXry47f1rdU3x9cfLsqjN0pz0DpA2pGhntQfCGNVv0qDkW01R5JmK+7YTC5Q1KGOMMZWkYw1q9erVI9IgUpE1sn1qBpf/QhWLFbWnGn1Z6Ud2f0mxinaTRtVOMh+JlDJz5szS7PwTJkxg3rx5SX9Cq3a2kxolkSp3SVKVznHJJZcAIUoSmuvmFUVa7T777AMETQHg8ssvB4L0pmNLo9pyyy0btI7RUKvVWLNmTVs/YhGJW9ekRSOl0evadD3KyteYU79D8MnpN2kFf/nLX4D2EXep6uF51xb7WcpgeHi4wc8TW0FGQ5xnpIoG+l45Tn/961+bzt+pLyYmL4ovtrZ0o7YhhGdex419ykXqRsbXrbG6YMECIGjziqaV9i9tKBtlG/tWVQleeVijsT7F7cxWnik6Tq1BGWOMqSQdiVvK1I9n+ZFEtcX76piygWp58bj6eRbVQ5MkqgggVZuIpfbsdWQ/W9nQ433KjOLr7e1l+vTpHdmfU79JKnz5y18OhBwm9Z80VS3tfMwxxwCjW9Ja5zz33HOB0P9ZzSBe1jwmb/2m0VCWxCuNXf44aenSmFRRQlF7iiCVJgBBUlUujaKopFm1y89q9XzFEn6nuTFFyR6vG/lqqoSfrbANcPXVVwNBss/uE7enaA2+Vs97ap+y86B6e3uZMmVKk79Z/6ei5bLE0XB6Z8p/L41KY/LnP/85EGp9SsMC2HPPPYFgYXnxi18MhLqaX/3qV4F0LmknY0L7PPzww4Xz9axBGWOMqSQj8kGlJL+idbfykKSiOmVxJF5e5XHN+srYP+mkk4BQ50+Sg3IpUlF9repJlaEttiIv6qxV1EvcHvWHVrtVDTNpAPIhqDqE1uWKqxSPBJ1b69RIKpL/IHv+1JhoVZdsJLRal6YIsUSra9OxJIVKopQUq7WKNPYgaFDSYhX5J00qrrbeSTtTGlPZ4zPPXzOaiMFsDUYI41H/q0+0PpEkeAhjSZX71Z6f/vSnQPuqB636Jtac4hzKsqjVai1940XOp2122GEHAC644AIA5s6dCwRfk/z3GrMvetGLgEY/qarxq7qEVvNWDIAsCOeddx7QnHvWSpNKabYrVqxwLT5jjDFjm440KEWgiHbRUtnf4n3i3xUd9Y1vfAMI2eKSSGNJFoIkoEggSRSf/OQnAdh3330BOOCAA4DgRygSJZeSZDpZDbIdqswR26NbSXypSgdaG0eakyRARUHJppytktwpsd9DEpn8MPIXyM8FQTNOVXG4//77m+zbI0X2/ZRUV0Ti1zaqsae1eN72trcB8Pa3vx0IkqbqPkpazfrA4v6Sv+VTn/oUAEcffTQQKvq380Vlj5nyq5ZdSaK3t7crvifV2tt+++2BoP3ElR2UwwOhisw//uM/AsEyojGtPL5Ya+80NwsaK52USVzfcCRjVPtIQ9c917OmqvnxKtDSlhSRCsEfqhqfekdqG1Wgkc9V9Tbjaj2daKedRJpagzLGGFNJPEEZY4ypJB2Hmff29hYqEtvqGNlt4085637yk580HFuOxWxSp9TQN73pTUBYKE/ldaTaqoS/QqtTyxgXIRskMlrWrFnDrbfemnTq5hE7mT/3uc8B8LKXvQwI6rPKPr3+9a8HgslqNAEJcu4rFFXLHshsoyCA888/v76PHLapgq1lOvVrtRrDw8NJk04n1y5TkwJtVLxY4fvz588HgolV/Z4NS1aaQ2y2UpivUgIU2JIqTFrEBN2NsOhardawuFzq3nXSr/HCeArbV9/o+VegjZ5lCGHUMrvJtKznWibmVCJ0qzDz1DjMJp2XwfDwMKtWrWp65ouWZdMxIAQ+feADHwDC+04Lh8rsrGNrrMqcB6HPNJ5lBtQxZMKWqU/fn3baaUDrhN7UtUyePLlwgWhrUMYYYypJRxrU4OAgS5cuLRQc0Y5UqRY5+eOF7iTJZKVMleU444wzgLC8uCR7SQUKmdSiaAocyHNUtkvc6+vrK81p3N/fz/z58zs6nvrlYx/7GBCuTU5mFWyVVCVJNV5OQORJMqniterPs846C4Ctt94aCJqCtIts+SRJ9LHEmF0OpKzlNnp6elren07Co7WN2i8HvJZ2kdau8ajtzznnnPoxtDS5pNC3vOUtQAgukSb6ox/9qOFYRUhpiWUWN+3t7WXatGmjes5FXNBUqD91TKWZ6P9sIrkSUFXAV9qW+k3HjssIpZ7lvGuJ/y8ziVznzgYJpDTh7Pcp7S5OvtfyOLKmxIEe+sxakPQOVWCJUiKUdL///vsDISDj8MMPB4KF5lvf+lZTG1PLsoxk3FiDMsYYU0k6riw5PDyclERHksAXh81KYopDRfMkmVgbuPHGG4HgA9FsL7uqfFQnnHBCw3557Y0Tg7VNmcttqNRRKsE5L3RYYbeS4CUxa6lmaU4K048XYIvJfi8JNA5jVVivEqHljxHXXnstEDTY7DHjBQrjay07SXf16tWlJlWr/QoFVwrDL37xCyBoQ/KZXn/99U37aukC+UxV1kd90q6ocatisULXXFbIvo5Z1vOubZVMuvfeewNBu5RWIW1Iz3t2sU6NaWlQ0m51DJVHu/nmm4Hmvmi14GJKi9e9K4uhoSFWrlzZlBAcWy2KjF1to3elQsTlm5L/V/2jz+ySRbK4KNxcZeI0RqV1yf+n982xxx4LwB133AEETTiPWIMdHBws/NxbgzLGGFNJOtKgJFEJSfajkVTbRVx1UjhVkWpnn302EBbpU4KfljqWBFHE5l+G/T1FrVZrGXWl/lVSKMBnPvMZIEg4ipxTAt1dd90FFCs6Gf8uKVYSqjRNaaJx0qKKUf7zP/8zEKSwuBxKq3YsX768VDt/9jxFFwYscjyNFfnb/ud//gcIy5ZIWs8rS6V9Fy9eDIRlYSTxjub5icdnmYm6SiSPC9KOptiyrBnSwhWlJ8uJkks11rLapaR3LZAp7UbPs44V90ERi0d8bfFyQN1Cz1xcWqnIe0bjW9G1KhobLyAqLUf9paRbCL59+aW0rzSpd73rXUB472iBUyVan3zyyQAcddRR9WNqnOsa4iVFOnkerUEZY4ypJB1rUGvXrm0rJbWiaGTHaDSV2CYrSUOSg6Q3zexZKandeZ966qnScndqtRpDQ0Ntl3BWORgIUpKiHeUbiZe7T7VREpukTOVTQZCCFLmjIrySXNVPP/jBD4AgPcUSU54UnyrGWWZemRjJUgDtiNtYRLJOtUNagnJKJNmmliZpdR2p4sFloIgzHTMubtuJJCyNSD5UlS6L86JkUdA4zZZW09hWe6TNqhiqfC+x37NVFF/2WvM+yy511Nvby6RJk5KaUpF8KPXZjjvuCIR8J/mYfvWrXwHBoqH+yNPY41JksSVAz7YK8sZRfVpeJuur0z4pK45LHRljjBnzdKRB9fX11W3I+h+apcvs/0ULNrbTyopUV9DMLJuspC/N5IoIKhJJ1k3fkxgcHKxLG3ko70i+Mwj29jhHSX42aVTSImNpUX3zzne+E4CPfvSj9d+knUmKk39LRTkVqfad73wHCFnout95mlPcb/FYmTNnTml+k7iSRNxHqTZ1i1gKly9RUqu0YEmjyuvpROKPKdMHJR9p6lxFNN84ElXXJuuA/EbSoDSO9Z5RXk72GLKAKKpPBX1vv/12oFm7jSNI9QxAOsq0SBHUkRAvWBhbPIqMTVk0Tj31VCD0lXybeqdIo9R407myfu/UkhjZPEUI75M44jT2XWVJ5Xh18vxZgzLGGFNJOtKgent7mTx5cjLSrogUUHT2lLTUainkWDqTtKWMfUljmv2///3vA0HCaOVHSC3OVqZEFWfqS6pU7pJsxtlckNhGHdd3U/tkG5YEpAXgtPSIvs9KOTqvJPmf/exnQFg0TtFAqUUIWy0PEre/G/T19TFjxoy29R7LIKVV5I1PVTA56KCDgLAsTNyf8X5F6pvF7WiXU9UJw8PDPPXUU01jrpN7qH10jariokhRWQmkFcmXIS0h69uQD1lSu3wsshoo8ix+V8TPbjZ/Mq4r2G3LyfDwMGvWrEn2YRFLkXyXqhghDVy/y+KihR2VH3rVVVcBoeIEhL6KF4jV+0HL9LznPe9p+F7vJr0bshHR8XiJrymrQbbDGpQxxphK0pEGNTQ0xPLly5skqZFETbWTBBWRIklKWkSe9CPN6dBDDwXguOOOaziWon0kUShaKq+97ez//f39pUaH9fT01Psx9h/IritbMoQqz1rIcZdddgHg3HPPBYIkI19VHHkVVy/I+sBUoVg+J2lSklTV97G0Gdvvs6TGhr7ffPPNm+qzjZShoaG6ZJdt52ik4Pja9KlxqbGUp7nEvlFpC7onqoMmn0CqDmSR9nUjik8RZykLSSdahjQoRZtKM1IlDlkAYutBNuJLv8nXJA1UGlQcBTmSCOEiVoHREC+q2QnaR8+jfMDSoORbk6/zsMMOA8J7UfdAUY8Q6mbqGdSxVRld75esLxDCO0KV+NUWaB4nrXyp7bAGZYwxppJ0vOT7pptu2lF0VDyLtpMcNFMffPDBQPAnKVJFMf4QZn399tKXvhQI2pfs3VoPSvXqWhFLvd3M1J88eTLbbrttsvqy/ldGOAQt5+Mf/zgQNClJLZLGtU6LjiGNSnZoVdqWRAtBapXGmdKMikRvinaVxYeGhkqz80+YMIG5c+cmozRHch61U+PyNa95DRCWgL/66qsBuOaaa4AgzQPstNNOQBjDirLS/VQ0pCqgjKRdqfyyMlDdOJHy17Qi1r5UueDWW28FQr04VcbX+JU/KS9qWPtKA43Ha0oDzRvP7TT8sjWooaGhenRs9jydvCdlTZJfea+99gJgwYIFAPV1sqRR6ZjS+rfbbrv6sfT+kD9en/L3qc+lnapyuupzauzm9VNqnli1alXhfrUGZYwxppJ0pEENDAzUJZ48WklUcZXednlQkkQ1o6uaQraqgo4liUp5EfI1yT6qKtuxn6CVrT8lmbaqpNEpqsyRstnq+6x9Vyu8quaeInYk4as+nipnK4JHEpH6SFJYNoIsdU+KRsV14tPLaoll9efQ0FCDNlLE9l20VqHGr3wlisRTJQ7Z7BcuXFjfV7Ugta9++/a3vw2Ee9WubmJe+1NVHbIaTxkMDQ0lqxuMRDPVsfQeufDCC4GgiconKv9n1gclDSCuZSiNpKjPKU96jy0jamcna3QVIa4e087CoH3ykL9I7wRVcVcFmAMPPBAI70y9A7J5YDqPxqb8U8rR0z6qJHHZZZc1nDt1jXnXNpLn3BqUMcaYSuIJyhhjTCXpyMSnBeHaqadFks1S3+tTJqjYMZtF5qrrrrsOgB//+MdAMPnJPJha1qCV6ScVSj1z5szSAiXWrl3LokWL2pp4sqVJ9LfUeYXcijhAIF7UMQ4VX19lf0R8DwYGBko1mQ4ODtbNM52EXKfGQlxoWPdepjQV7NRYy/a3TCm6VyrJo9BeHaOdwzjbP+3MamUWN5UJul3gRStzVKpflWwrc7zMdzqXTM9ZE7T6Pi5D1K7/UgEled/Fz0XZCxYq0Cw+fyfEZnK9E5SCsmjRIiC8BxVooqCd7BjVPgpVzwZNQbgvt912G1AsETzV3/qcP39+g5mxFdagjDHGVJKOi8XOnDmz7bLEeRJVO8lKzlAdW866H/7wh0AIKc2W6ZAEqiXHtU2ciDuS5QtErEktW7astFDewcFBHn/88aQzsVVpmWzQRnbbdhJZGdpKql+LFN2NKXPBwp6enoZE6pEcNxUQoqTp//7v/wbCku/vfve7gRA+La0eQrkpOZYVXq5tU+0rEmqscRlribHGPBp6enqYOHFiR8uQZ/fNfsb9GZfY0TObSgaGYktR5LWhSAL0SJKkR0q2/SmrTl7JrFSwhz5jS4zSbIQS/rPnlCYTL3uSSiEpEsjT7h26cuVKh5kbY4wZ23Rc6mjZsmXJwooiz2aeIi69k13IDkJIbt5CfNK6Urbo+NyxtJknLcVaS7zPjBkzSisnM3HiRLbYYoumpGBJwXnla1KSTLtluTvRdlP/t9o3bmfRY2Ql9NEyPDzMypUrO0p6bKe96lPausKOlUh6/PHHA833DELof+z3S93DVGJpK+JjqOhqGag/haTt+FrzpP3U2OhUMxmNJtPu+Yf2fqxOFtcrwvDwMGvXrk1qmGVobil/Wl7IvPxXRQspxO+ZVu1O+fE7seJYgzLGGFNJOl7yfWhoKDlDd1KEMSU5xNvFmlXebynJs2jiY5FEXX3OmDGjtCi+np4e+vr6mpYUiduQJ6Gm2htH8YlYesyTdFPaQyfRj3nnzttH/0+fPr00Daqnp3GJ8iKLzqU0qKLXmKfZC0msqXsyGum5mz4SMTg42FCWJ1UsOK9dqWuLI/FSGn98vCKMJHG43fnLXvJ9cHCQRx55pMlP2sp60e7Zjmk3zoqQuo9FrFDxsxBbiDbbbLPCmqk1KGOMMZWk42Kxc+fO5XOf+xwQirWqLIn8RtnS7IoykyQiiUEzqPZVrL6Oqe30vaJLlI+S/U05UyqQqm1kP9e5JQHGy6ZnbbNqr76bM2dOQ3vKjDqThKrCr3Pnzm04t+zD2eUodA15vjEIfaDfVbJEJYB0jrzj6LtYulPfC7VLxxLqu6wmqL4Wsd+wGwsYfvrTnwaCz0QReOqbrJ9G7VE/xZqRIu401mIpVGNd15G9V3GEmnJ6lAej/DxpFdl8Nwj3NBuZp2NpH22jY+v3Mujr62PWrFl88IMfbPhez5OuPTuG1Oe6Nn3Omzev4Rix70f9pv+1n/JwoHnJ8uxv0FzwVO1T3+heZ8en7qeec/WrnsF47I+W3t5epk6dWh+jMXF/aJ9sW9Q2XY+uN4621Pc6VnzfINwvvSvj51G/a1+9a2N/eV5JKmnfcS7Z0qVLCz/31qCMMcZUkp4O7ZKPAvd3rzljhmfVarV57TdrjfuzjvuzfEbdp+7PBjxGy6VQf3Y0QRljjDHrC5v4jDHGVBJPUMYYYyqJJyhjjDGVxBOUMcaYSuIJyhhjTCXxBGWMMaaSeIIyxhhTSTxBGWOMqSSeoIwxxlSS/wOSEEQOsANOkgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 2/100, d_loss=0.224, g_loss=0.312                                                                                                                      \n",
      "epoch = 3/100, d_loss=0.521, g_loss=0.180                                                                                                                       \n",
      "epoch = 4/100, d_loss=0.346, g_loss=0.207                                                                                                                      \n",
      "epoch = 5/100, d_loss=0.680, g_loss=0.190                                                                                                                      \n",
      "epoch = 6/100, d_loss=0.280, g_loss=0.263                                                                                                                      \n",
      "epoch = 7/100, d_loss=0.102, g_loss=0.109                                                                                                                      \n",
      "epoch = 8/100, d_loss=0.773, g_loss=0.286                                                                                                                      \n",
      "epoch = 9/100, d_loss=0.129, g_loss=0.350                                                                                                                      \n",
      "epoch = 10/100, d_loss=0.441, g_loss=0.249                                                                                                                      \n",
      "epoch = 11/100, d_loss=0.314, g_loss=0.304                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXeUVdX99j8zQxEQBCmKBcHeFXv7RUWxxN5dxhqT2GKNy5hllqIpajQao8Zu7D1i74oFC/bexY4CKkVRhGHu+wfvc/eZM/fO3LLvcGZ4PmuxLjNz77n77LPP2d/+rcvlchhjjDFZo35eD8AYY4wphDcoY4wxmcQblDHGmEziDcoYY0wm8QZljDEmk3iDMsYYk0m8QRljjMkk3qCMMcZkEm9QxhhjMkmXct7cq1evXN++fWs1lg7D1KlTmTFjRl21x/F8zsXzGZ8JEyZ8k8vlBlZzjJ49e3o+/z9fffVV1fMJXqOi1Hu+rA2qb9++HHrooZWPqpNw8cUXRzmO53MuMefzkEMOiXKsjs4pp5zyabXH8HwGRo0aVfV8gudUXHLJJSW9r6wNSpx88smVfKxTcNppp0U/puczLqecckr0Y3YUTj311OjHHDVqVPRjdhRqde5eo6VhH5QxxphM4g3KGGNMJvEGZYwxJpNU5IPKKgsssAAAQ4cOBWCNNdYAYNFFFwVg/PjxADzwwAMAzJ49u51HaIwxplSsQRljjMkknUKDGjx4MAAbbLABACNGjABgzTXXbPa+22+/HYD6eu/LxhiTdfykNsYYk0k6tAY1aNAgAHbccUcA9t9/fwBWWmklAD79dG5u3UMPPQTAs88+C0BjY2O7jrOWyO+2zDLLADBw4Nxk959++gmAzz//HIBJkyYBkMvlgPK0yKamJgDmzJkTYcQdC82T/JpLL700AF26zL11vvjiCwDeeecdYP6co3Koq5tbPKChoQGAnj17AtCvXz8AevfuDYR1vdBCC+U/+8033wDh/p08eTIA3377LeC574xYgzLGGJNJvEEZY4zJJJk38ckk0K1bNyAERABsvfXWABxzzDEALLHEEgC8+OKLAFxzzTUA3HzzzQD8+OOP7TDi9kEmkhVXXBGAo446CoD1118fgIkTJwJwxx13APDYY48BwTSVNJ20hUwoMmdNnz4dCKa/zsxiiy0GwIEHHgjAAQccAECvXr0AGD16NADHHnssAD/88EM7jzDb6P7t378/MLcWHcDCCy8MBNPpqquuCsCwYcOAYKpeYYUV8sd66aWXAPj+++8BGDduHBBM+EojMYXRM6PWptC0GVc/V5LWYw3KGGNMJsm8BiXNSZpCssjiyJEjm71H2sKFF14IwJNPPtlu42xvdM4HH3wwALvuuisQpCNpk3rdbrvtgCChLrfcckBzLahY4MQzzzwDhKrjjz76KBCc1J054Xn33XcHYI899gBgySWXBMI5r7baakC4HpIWIQSkzM8oCEKa5xZbbAHA8OHDgZBEr7nSeiyknWvutU732WcfAP79738DcOKJJwIOlhBaiz169ACC1vrVV1/l3xNrrpLrfsEFFwRgkUUWAYIm9d5775V9XGtQxhhjMknmNSiFkh933HEA/PKXv8z/Tfb+s88+G4Abb7wRmL9t0c899xwAAwYMAEKysjQpaT1jx44F4Msvv8x/Vv4AhfgKfVbz/PLLLwNw1VVXASEBujNqUvKZyOc0depUAO69914A/vKXvwAwbdo0wFqTkEQtDUrJ8xtvvDEQpGyhtIjPPvsMgA8++KDZcQCWXXZZAIYMGQK0LG22yiqrAPD6669HPJOOi+5bWQG23XZbAA4//PD8ez755BOg+tSbxRdfPP//XXbZBYC9994bCOk+0njLwRqUMcaYTJI5DUoS10YbbQQEzWm99dYD4MEHH8y/98orrwTghRdeAIJ20JkSccvlF7/4BQBdu3YF4OOPPwaCf06FcpXAm9R65EdJ+6IUyaaoyT333BMI2sOGG24IwEUXXQQ012A7ulYl/9v//d//AbD66qsD8N133wFhfjVn22yzTf6z8ptK43zllVeAoIV1ZqRJTpkyBYDbbrsNgEceeQQI/hCtj/fffx8I86ko1CTyV+20005A8LuqKLTmfn7XoPr06QOEiF5FoOo+lv8PwjwrMrJU5FfafPPNgeBjhKAl655QgYRKsAZljDEmk2RGg9Juu+mmmwJBc5IP5Y033gDg9NNPz3/mrbfeAoIvyvb/kOf06quvAkFylQalXKaZM2eWfEz5Bb7++msg5EX94Q9/AGCvvfYCQl6KyipBkKA7Ksr5Ug6d1piin6QBSPuUlAqwww47AEGyV7TZ3XffXethZwZZM+6//34g3OeaL0Xrped51qxZLY41YcIEANZee20Afv75ZwCWWmopAFZeeWUglE3q6GuvXGR9Uuk3PUPlu5OWlPQ7a/2W04a9EEmrif4vLfm6666r+LjWoIwxxmSSzGhQisxRtI9aZ2i3v+KKK4Bgz4fCUtb8jrScO++8EwgalCJpKtEypW19+OGHzY4pW7fyT3beeWeguTSl69VRfVGS7CV9FvNvSqOSFgnBH7jZZpsBsNVWWwEhQu3dd9+NP+CMonVZDYr8k29PEb6yGsjvOj9UOEmiCDqtMxXNlq9Ja1e+oI8++ij/2Vo+Q6+++moA3nzzzYqPYQ3KGGNMJpnnGpSkIkWDyAelSKdbb70VCNF7HVUSrzXSjJTXoLpl+jkG0h7kx1KtQ0ULKdJyk002yX9G703avTsSyrqXX62YxCkNKhlBpvwwSfyKBJTvVFqtcoBM62idyQel+n6ax7fffhuAGTNmzIPRtT/yLSmaUdGNqm6idaX1Jo1GEahQW21TfvBqoqqtQRljjMkk81yDUm6D7KfLL788AGPGjAHCrq8cJ1MYRTI+//zzQJAqa4EkIkX3Kf/pjDPOAGDdddfNv/fpp58GOq4GpUgw5YtIg1JjPVWYKCS1P/XUU0Cw+at2pPJ2VFHeGlRAlSO6d+8OBC0BQrSomnPKOiB/q3L8OmsepOZEDVmlOe27775AqLMpa4p8xtLkVf2kvaxQMa6DNShjjDGZZJ5rUIpAUZ8nSapPPPEEEKQA0zpqh61afDF9T8WQJPb4448DwdYtrRjC9VX+S0eNsJIPSpqSNH1FSklTTEZJ6pqoSoIy7BV9plppkjSlBZeTo9ZZkOYkzVTzqmr9EPLK9B7VglR+WUfV0ttC1cileZ9wwglAsDqle7tprarrgGqUdkT/vTUoY4wxmWSea1DSnJRT89prrwHBniwkYaUrbUPL7H69dlRpvRJkf1YEj7oKq+ZeLdC8K+JSUVTKZIeQ3yZfTbk1v7KCetnIn6S+RkceeSQQ6uwV8kW98847QKiEIO3roIMOAoK/UBKvop86Sl+jUaNGRT/m7373OyD0FIKghWu9qW5fsr9RZ0RWiPPOOw+AtdZaCwj5X2nUPVvvl2auShNJLT/rWpU1KGOMMZlknmtQqp8lv4WqR8tur6q56b5QELQpSVSq16dINmkPHUUS7ehI61W0GoR6XKq91lGRRqo+WjpH5ThpLaqWHBSv2qE1rw6xioZUxNoxxxzT4ljzG3oeJPtBCVXgUI5dZ6/BKeuD8r+Kdb4Wu+22GxCq8Sg3T/lPyVqZ8vVnFWtQxhhjMok3KGOMMZmkKhPfaaedFmsc+bI5cuTpVWqtzB4qFwPBSSgTnkwiMhNefvnlADz88MPRxjk/U+r1fuihh1r87uijj449nHZFod8qfqvQerWDUdDE6NGj85+RA1qOfgUCyUSjsPw///nPQEgKVhuJ+RmVNtO8QigGu+qqqwIh7FpFUNUGprMhM6fcHW0hc7oClAYMGACEdIZkAq2aj1577bVxBhsZa1DGGGMyyTwPkkijsPM99tgDgF//+tdAcEZLO4LguJbEKWlLpXbkFFSYr5yqnQGF0OucVIJHEr2kp1qGmc+PpIvxKllSIeMKooCQmKsEUyXmSlNSUM8LL7wAhGvooB4488wzgZDsDLDlllsCQSPYfffdgRAkpYTUZDHUzoDm4MorrwTCPa4ApLRmpZ9lherbt2/RYw8cODDuYCNjDcoYY0wmyZwGpURThZXLzqxwSCWfQUielE1VWoW0B7V9UMtt+aQ6AzpnzYtsyfJ3qBWBiYtCdJVMKw12ww03BOBvf/tb/r0rrLAC0DzZFEIKhfxYSu7t7OHS5SC/UjLUXj4mhVGraOp+++3X7LOdTZOSBnX++ecDocW9WhWlw87lm5emqfSFxRZbDAiJ4sljZRVrUMYYYzJJ5jQoaT8qkCg7/c033wyEFgbQsnmcfFJqta3mh2qG2Jk0qHSDPGmT0jg1jyqs2VFLDFXCqaeeGv2Yp5xyChCi+TTvN9xwAxA02HXWWSf/GZWYue+++5r9TT5T/d2aU0s0R0q6h3C/Kyl6u+22A4JPRsgndf3119d8nO2B1py0dr0WQxqV7n359fVM0PMQgo//5JNPBuDrr78G4O677wbgiiuuAGDcuHFVnkVlWIMyxhiTSTKnQUk6UhM3+Vhkk26tCZaKbirSSr6ntA+gMyEbvXJq5AuR9ihpS/PnCLE4KDoy3VAzWdJJ/qo333wTCLl88o0uvfTS7TPYToIKSSuaTeWQFCWpSN/tt98e6DwaVLnIFz9t2rRmr/KXrrLKKvn36nkg7VRR0rfddhsQLAXzCmtQxhhjMknmNCjZ5RWhIqRZya4KLRu7KWpF+QHStgq1QOhsSPKRfVkVN9TiYfz48c1+NtUhyVNS6aWXXlr0vaogofWotdyvXz+g4zdzbC/kq1Nbl3SDQlVcaKuY6vyGtPqhQ4cCcMQRR+T/pmemWpfcc889QPD1y5I1r/CVNMYYk0kyp0GpJpQawR177LFA8KlcdNFF+fcqn0QccMABAGy99dZAaGSWrD7RWRkzZgwQovhUtUDVDDQnijpzvbf2Q9rW9OnTgZCjpqg+ZfzLemACySoJ+r+eBfI5SXNK+1PMXNQSXr465UNBqG94yy23AOE5Mq81J2ENyhhjTCbJnAalyBvZm3fZZRcANtpoIyBUN4eWNnvZWpVBLntqUuvq7KiSuLLFlXV/2GGHASHaTHNjao98oMpVU5SpWnmPGDECgLvuuqv9B5dRpC2pWgTA8OHDATj00EOB8CzQc0B+VuXwmLloLqVJFfLRKdpXzTOzgjUoY4wxmSRzGpRyRs455xwgSJWqGq08HwiRaqrRpZbjytxXxen5qYrCRx99BIT8HLWLlv35uOOOA2DYsGEAfPDBB/nPKpdq4sSJgG35sVHUqV7le1I0X0dl1KhRbb5n5MiRABx11FFA0B4Viae8Mq296667DoDlllsufwxFnKlOpywmemaop5x6SZm5KCJaz8tCfaWklarX1qOPPgqEChLqbdbeWIMyxhiTSTKnQUm6lGSlSr6yLyd9J8okV0SapDDl+khzmp9qnWkuVMNQPj3VNtx2222BUJdLkWUQ7M/qV5SWmlSny1SGfFB6lQ9lfsjb0TnL17HMMssAISJPUWN6lb9EFgAIVboVtffkk08CoXq5OmercoKZS7rDbqH1lu63p3u9tco97UHnvzOMMcZ0SLxBGWOMySRVmfhUor0WyCwnk5/MT1kLg8wqKiIrJ6ccozKhSN1PomaRKhUlk4pMpiqHomOrHIqCUWS+SQaltGVePe2000o/qQ6O5k/BKDJzzQ9oDaltjlJB1MZdJiaVhVJJM5mqIZj0lCqh9fbyyy8DoTivaY7C8GWyT96TSg5XYInSVOQumdfuEWtQxhhjMknmgiRMXOQwHjt2LBDKPy255JIt3ptuUd69e3cgBKzI0S3pV83k0kV7TWF0LdTqXT+r+GlnRs52hYQr+EnnrrUnzUmh90kNSq139Fmtu3ntyM86CnpSGH6yzbuaO0qzlVaalVJo1qCMMcZkEmtQ8wnyC7XWNtolYmqLfAHyC86rNtpZQGHMenVybe2Qz+7cc88Fmrcskk9a6SbzKiG3GNagjDHGZBJrUKbTccopp8zrIRiTGYq1gO8IWIMyxhiTSSrSoOan3JX2wPMZl1NPPXVeD6FTUUoxWFMeXqOlYQ3KGGNMJqkrJ1O4rq5uMvBp7YbTYVgql8sNrPYgns88ns/4VD2nns9meI3GpaT5LGuDMsYYY9oLm/iMMcZkEm9QxhhjMok3KGOMMZnEG5QxxphM4g3KGGNMJvEGZYwxJpN4gzLGGJNJvEEZY4zJJN6gjDHGZBJvUMYYYzKJNyhjjDGZxBuUMcaYTOINyhhjTCbxBmWMMSaTeIMyxhiTSbxBGWOMySTeoIwxxmQSb1DGGGMyiTcoY4wxmcQblDHGmEziDcoYY0wm8QZljDEmk3iDMsYYk0m8QRljjMkk3qCMMcZkEm9QxhhjMok3KGOMMZnEG5QxxphM4g3KGGNMJvEGZYwxJpN4gzLGGJNJvEEZY4zJJN6gjDHGZBJvUMYYYzKJNyhjjDGZxBuUMcaYTOINyhhjTCbxBmWMMSaTeIMyxhiTSbxBGWOMySTeoIwxxmQSb1DGGGMyiTcoY4wxmcQblDHGmEziDcoYY0wm8QZljDEmk3iDMsYYk0m8QRljjMkk3qCMMcZkEm9QxhhjMok3KGOMMZnEG5QxxphM4g3KGGNMJulSzpv79OmTGzhwIHPmzAFg1qxZACywwALN3jd79uz8/7t27QpAY2MjAHV1dQA0NTUB0NDQ0Ozn/MC6dGn2uULvSx9b5HK5Zu/V+zRu/V1jSX8++Z76+vpm3z9r1iymTZvGjz/+WNfiQ2XSu3fv3IABA/Lj1Di6devW7H0ad3I8Gp9e0/OT/Eyhz+nc9XPydzqGfk4fK/1dulbp+U1+b/o6Jn8/derUKPPZp0+f3KBBg/LfpfFpPvV7fXdyPDNnzmz2XqFzSa8RzU3yWMnvTJJ+T/ra6TPpa6nvSKI5Tt8/6ev5+eeff5PL5Qa2OEAZ9O7dOzdw4MD8fa5ja440huQ5t7U+0+ch0msquYbSxxbp9xT7rD6X/k5oOW8aR3r8EyZMqHo+IdzzOq6elXpGieRY089CjTn9mj6/9PrR/CTnMb2OdIxix9Zn08dKfld6XaefK0Dp93wulyv539ChQ3PXXHNNrqGhIdfQ0JADckCurq4uV1dXl/85+U9/a+09hd5fX1/f7F+x3xd6T/pfW+9ra0zJcZ144om5RRddNFfOvBX7N2TIkNyFF16Yn89i4y/0r9R5LueYlV6rSo6laxFzPocNG5a79tpr27zOrY2vFnPQ1vos59htvff444/PHX/88TngxWrnc4kllsidc845Fa3Pcv+1dl+n/2k8bc1rNWtcfz/00ENzhx56aJT5zOVyLLXUUrnLL7+8xTO0Fv9Kmetia7Sc61Hs+VrsmX7WWWflllhiiZLueZv4jDHGZJKyTHxNTU389NNPBdXvYpTz3uT7i32ulOPVpdTTUo9dyrgWWGCBgqaXSsjlcjQ1NbUYV10B81up4yv2+1LGXOm1EuWMW+9ZeOGFW5h/KqWurq6Zia7Yubc2vkrWRmvf1dox2/quSsYycGDVVqg8dXV1dOnSJcr6jEk193G53zF48ODox66rq2uXuStn/cec0/Qx0j/LZFkK1qCMMcZkkrI1qO+//36eSU7FkKNOO3OvXr2avcoBPn36dCA4Jss5D0khSy65ZAtHeqXkcjlmzpzZrtJU1r5j0KBBLRzEldLY2Mh3333XruuzNWmxHM0tFkOHDo12rFwuVzCwoBZk7ZkiBgwYEPV4c+bMYcqUKVVZH8qltWO2ZVlpazyVjLtnz54tAl6KYQ3KGGNMJilLg6qvr6dHjx5t2hjbC+3CCy64IABrr702ADvssAMAvXv3BuCJJ54A4J577gFg2rRpZX+XzrFXr15RfSZdu3bNzHy2J7X0I7THfBYLp6719xZD3xVLG4W567OhoWGerM/WJPv2nNeY8ynm1ZwWohpffznvS/Lzzz+X/DlrUMYYYzJJ2T6oH3/8sYXdsT2jepLaS79+/QAYOXIkAL/5zW8AWHHFFQGYMWMGAF9++WW0cY4fP56ff/654s8naWpqyvvHYqFzlIQvCTB97tI6F1100fxnv/vuOwC+//57IPjulCBYi+v71VdfNUvsziqaz549ewLQo0cPIKyxn376qcVn5oVUPGnSpGjH0vqs5Xnofu7Tpw/Q8p5OalJvv/12s9epU6cChRPEYxH7/szlcvnE5/mVadOmlezbtAZljDEmk3iDMsYYk0nKMvFlgaWWWir//9///vcA7LTTTkAIH7/rrrsAuP766wF47bXXAPjhhx+q/v7GxsZopoSY6r5MITKRLLbYYkAIO+7evTsQTBabbbYZAMOHD88f45133gHg5Zdfbvb66aefAmH+YppUyknaa4umpqYo1ziJ5lUmKAXiDBo0CIDHH38cCPM6rwNclFoRA5n0Y6L51HVfeumlgXAP6+ftttsOCKZUmGsOBrjvvvsAuPHGGwH44IMPgGBujUmhOp3VkAUTX9JsWsv1mnY3yJzbq1cvh5kbY4zp2JQlvtbV1bWoXA7tswtLA7juuuvyf5M29fXXXwPwr3/9C4A777wTCIm5MRk6dGi0RN36+vp8KHy1SMI/66yzAPjFL34BhERDOfclEWo+k0Enm266KRCqDksi/fzzzwG49NJLAbjjjjuAMO/VJHN269atZGmqLRoaGujbt2+UYwld61122QWAv/71r0CYm2222QaY95qTiJlY26VLl7xGXi26j1dYYQUAfvWrXwGwzz77AEEjFVqvybWhe0XWAQX6nHPOOQB8/PHHQOGK8pWy8MILRzsWzF2jCy20UNRjtkVak0nOaS0CoPRM0fWSFiwLV58+fUpO1bEGZYwxJpOUpUHlcrnoNtliyEYtaencc88FYMMNN8y/59VXXwXgyiuvBGDMmDFAHF9TMWIm6uZyuYLhyZUgSXSPPfYAgnSZDi+XVvnWW28BIQQfYOLEiUDQrvQq6VbH3nHHHQE4//zzAbj//vuByqT3/v37R/ND1aI0j+ZPx5UF4dlnnwXC/BWSQNPJvMlx1or+/ftHO1bMNAhJ0wcddBAAW221FRB8Zt988w0ATz31FBC0oeT9Lm1OWphC0d98800AbrrpJgCmTJkSZcwQVyOFUHC7PdDalRVAVpZkoYJYazF5Dy+++OJASPt5//33AXjhhReAuVppqfe8NShjjDGZJHNRfNr1ZYOWBLXaaqsB8NFHH+Xfe8UVVwBw7733AjB58mQgrg06zezZs6NKwLFad0jTlGSiSCHNl/xGF154IdAyyRGC7Tjd9VaRgPvuuy8QJNeTTjoJCNLv888/D5Q3/z/++GM0KVXFd2Oi+VxuueWa/SwNND12aZ0AI0aMAEICtK6F5r4W1oiYUXcxLSbyP1x00UUA3HLLLUBYO5Lq5dsr1P14kUUWAeCyyy4DgkYlP5F8OzE1qFjWkiS1fD5BeKbIirLxxhsDwccsaxSEeU/7okrV+nU/SDsD2HzzzYHwTBo7diwQns/jxo0rOeLSGpQxxphMUrYGVetoJTVck+a0++67AyEX54Ybbsi/98EHHwSCRFpufkElpY9mzpwZTQJSQ7hqjwHBL6Q5eOWVVwA488wzgWDbb03CLqbNqbSMJFf5sRTZdt555wHBr6BSSdC2tDhr1qxoa6q+vr6ZJBcDSf7yoajMlSIY02OX5g/w29/+Fgi5PboWyuOppGhxMWpVbizWWte8ffHFF0DIaZIGWiy3Lvn9us/l09hiiy0AWH311QH43//+F2WsSZJrOQYqEF1LpGnqfjz88MOBEI2bjMTW/KZ9rIq809/l19ea1XrTdyV9n7pON998MxCeH9KaFlxwQedBGWOM6diULb7XqoGZdmzZ7Q855JBm33fBBRcA8Mgjj+Q/ox25FlpdMYk05nfFsPFLGlPkjKQXZdlLcyrF5lvs3CRFKWP/n//8JxCk4NNPPx0IkYSq4AFBAm3Nhh3LD5fL5aIXntX1SUuWmvf0eSXnWVFLypVSGxhVNtHcFNNSWmsfX2x9xvRvxPRBaVx6LfW4yfPT/3UN5INSlKmsEZVok8XWYEcoZCxkfTrggAOAUGlH8yCNJrlG9XyVJqRI3XXWWQcImpGum6JXZdGSZeGNN97IH1M+p7R/S5Tjx7cGZYwxJpOUrUHV1dXVJIpNuQ2yK6sNRDrHKbn7VzuO1j5f7G8xo/jq6uqaRX1VgiQfHUf19D755BMgflQXhLpzksgOO+wwIET3Pf300/nPvPvuu0Bx/2C3bt2ialCxWqEkjwkwYcIEIEiDyt9Jr4WkxD169GgAjj32WCBEoqoCiqL6YoxZ44h5/nV1ddGqplQzBqGosHXXXRcI5zxu3DggRATGpJbWmVgMGTIEgCOPPBKA7bffHggRiGrUeuuttwLBypIci563mtsNNtgACD5VaVpau7ofFB2cbPMizamY9jl48OCS/XDWoIwxxmSSilq+x4wY0k667LLLAmGHliagXCdFjtVaomnLxh+z+rZaalfDmmuuCQQfiXINvv322+oG1wqaE0X2yD8oH5SkMAi26mIaVMwovhgaaRqNTZXdVW1DkXmKRioUhSYfnSRWRRhuvfXWQJD829J6SpmfdJXwWLRX5Zg06SryEHx48jnpmiiaVxpUsflqTXMpdr/HzoOKEbkrpMWrYsOee+4JhGeq/PX/+c9/gNarnuhvr7/+OhCex9KgNLeKXpVPSv5UVf6AttdMjx49HMVnjDGmY1N2y/fYmfqSApR9rJ/l3yhFc0pLRqVK5IUkqrbswzGjzubMmVN1xXVJkzpnSXyxfTFJ0vN7++23A7Diiiu2eG9bGs2kSZOiSem18EEJSZDSCOUP0XotdB3lL/3HP/4BhKgqZfZLO1CliRjE1vCT/ZjaA61ffe8mm2yS/5vyyiR9P/nkk0Co6hFjHaXvbVVjiEWMflA6f/XMUuSdOheoR9nZZ58NhPlp7bkoC4BylpZYYgkgaP+qH6hXPXekSSVzq9JWhTRTpkwp+VpZgzLGGJNJyu4HFTsLWtF76623HhD8GpIC0rtwUkKUlKVII0WsaXeuRa+TmHlgMeZTkrwkv1rWeSss62gLAAAQxklEQVSG5l3262SPK/Vnkk9M85esuRirH1Qtqplr7Xz22WfNXrVe119/fSDY+5NrTWORj0SSrqqkqKux8sbSUU+VRJnGpL6+vt2i+KQ5qa6eItFOO+20/HuU56MIMr0mo9KqJe2DrkVH3WrX6LBhw4BQ11BzpvUjraZYNf0kep5qPauzsSID5XOVpUDfpeeWciOTVgD5wYud54ABAxzFZ4wxpmNTtgaV9MFUI8Vp51bnV+26d999NxAioPRdsnEqKx+C9KpxqJr2M888A4RdvVg8fqHx6/uKneOsWbOiZevX19cX7FBcDpJgRLmZ+pWQnpt03a6kHV9RQJLE0z6i3r17R9OgunTpEr2jrpCUrt5DstHLn6Q1V6hih85d8yO/xsorrwwEabQcjb/Y+ozZa0iVOcq539PdWyVx635X3p6OJV+GaknqeSDLStKHKYlca74tSb0SYuco1eI79AxMr3WtL/mCVYNPVWWUk5icU2lOigCUdqY1q7Up7VWVJRSLoPyp5DVo6/xyuZwrSRhjjOnYeIMyxhiTScqOSa2vry+avFZIbUv/Tqq/HOn6uxK+VBJezcdkArjqqqsAWHvttfPHUmMymUY22mgjIDSXu+2224CQRFaKWtnWe3r27Bm15Xu1xSg//PDD/LEgqOaxEzahZQiwXmWWkfkmGZosk4FMAnJsa7zDhg2Lllw7Z86cfJBNbHSd1MZEptlVVlkFCCYqlZOBYN7UexQGrDBjlYSRaaYSk3naJK37JgalOvSTJh3Ni0x7e++9NxASQZWIr9I4MpXqeaDfL7nkkvkxCM2TAoNULLatsObk+aTH2xaxzM9JqjVJqq2IEuO1rjTnmtODDz4YCOH5Ov+k+V/PUAUxyUSdLu6rMSsgSs9pXa/kM7HY/Or3TtQ1xhjT4SlLzJ4zZw5TpkzJS+fakbUbahdNJrelJTw5P1daaSUg7PaSsFVQU9K4JNNlllkGCOVhAP773/8CLUvIKERVTlQlV5YjDbZH6ZMYYebSoCSN63iSpjTeaoImNBcKNZUTVmWWpCFoLMmmfdJmpYGkpbi+fftGm9P6+np69uxZs+Z9EAq8SlNRIumJJ54I0EyDkwNZa1jzpnU5fvx4oLxrU2x96rXW7cTbQhq8NCCtDUneWhsKY1ZJHa1bWVLSidEQHPl6ZqiZqdqaSKqvVUugGNTX17PgggtWtUYVsHPCCScAYT7UIkNrUutNz2M9t5PPHK1jab56DkvLV1qFAlP0rH/44YeBMPfJ0mptrcHp06eXfI2sQRljjMkkZWtQ06dPz0u82k21M2sXllSURBKTCj5KCpD9VDZoSQM6pooT/v3vfwdCWR0IUpbGod1c75X9+6677gJKK6DalkQTs+V7U1NT1WVP1PROkqbCQBUWGtOGLg1KmqpaSks6Vli/vhvCdZTmLAla1zVm6ShRaemrQp9No3WrlAb5RKXx77///vn3Dh8+HAjNJHV/qPSMCiLHLNFTSmPKUlFx6FK/O/l/3c8Ke1cpKFk7tJYUKq15lWSukGhpmxDaRuj+li9K7V4uvPBCIGhSxa57eyQ5FyNGuTh9XqkNusc1P9KQ0pYPafT77rtv/lg777wzEJ4b+ozW92WXXQaE9Ap9t66rnl/JZ2Ix7ShZZLrUZ6g1KGOMMZmk7ETdZIM57dTpdtjyF0HYaSVBaxdN24sVkaNdXj6Lm266CQjN35KNsdJ2d5XlUKSYSsoocihGC4qYEn+Mdhs6d0k8ajSmeVSEXLWaGgSpePnllwfCvEra1bVOSr1KzJWUp581nm+++SZaUnH37t0ZOnRofh1K2kv7aZJapeZfr5I201Ku1qNedR5qziifS1J6fOmll4CgPciyIK23kmtSLBKtVm1oSvGRJudTGpH8IPJ/aD0OHjwYCJq0LCjSoHQP6zWZ2C3/87nnngsEzUkavSIsFb1bi+Kx1VJfXx8talXXXGsurT1r7PJP69mpJoMAe+21FxAsHbqX9dx97rnngJZFu6tZb2VFUVb8LcYYY0wNKUuDamxsZNKkSS3KD0myliQlaRKClqVoHklS2s0lQaV9Jtr15d9IS8NJ0juyJIm0LbYcin2ma9eumdKgNB9qT6JcMPk/HnjgASBEl1Ui+egzkvyVOyFJMJ0flZRcdQ2kmShqKIZGl0YavvxBafu4pHRFOCbHJX+GJEqV3FIBXJXekrSquZAfQP6k5HlJ+l911VWBEHWq6Kqkr66Sc02+6hrpfGLQ1NSUv/9aI6lB6ft1zvIp6zjyx0nb1rqU1q2fNY/J9SrtVVrrWmutBcCBBx4IhGhJaQiVaFDpezt2cWxoPx9YsQhPXQMI967m/f777wdCsW49h2OOuZxnqDUoY4wxmaQsDaqhoYE+ffrk7ZXpwpCSjrXrQrA1S7JStIi0LB1LEpZsz8qp+eSTT4DWG/DpGOnqE5LKdMxyKCYxTJs2LVqeRcz2EMofUdsH5R9tu+22AFx77bVAdVFeukaKGNTP8u1pnpO5QJJAhw4dCgRNWNJtTI20sbGR7777Lq/JKWIsrQVIuofQnl7zpDw82dzl10hXe0hn1ksjKLRu3njjDQDee+89ILTZ0Jw88cQTZZ5p8fUZu5JGKRp+ciy6vnomyLcs35SeA/qMNFP5UJV301qUl75DzfVEupVLJaTnVZpyLJqamvj555/nSSShrqXyRCHcn7IUqAmkrCS1GOcCCyzgShLGGGM6NhU1LFS2uCJ00n6kZBl4/U22aNn/5beSVPniiy8CwY8hSUvtDCSdJytJaHdX24L99tsPCNrZQw89BFQWvVdMchgwYEC0OncxavEJSfwXXHABAH/84x8B2G233YAwvy+//DJQWcWBdHa5rqG0jrQWnPyMtGpJpNJuJ0+eHC2Kr6mpienTp+claF0nHb9QAzdJipofrTvldLV1rUuJatK8SDrddNNNgRBxec0117R5jGLfm0ZaYwzmzJnDtGnT2hxX8vopOvdPf/oTACNHjgSCBUTtHWTtkAQvza+cai/ytwpFoFWyttPnqO+IOZ/pY7cXWveKoFT+IoTKH7LAfPHFF0BtW5iUEwltDcoYY0wmKUsVqK+vbxYlJElFWkChDGnlRMkvJO1Ku7nqkY0dOxYIFQa22247ILTJVh0uSbzJ79exZUe97rrrgBDZVk3mdjpKaurUqVF9ULGi2TQXkmCvvvpqAI444ggAdt11VyDkiMn2X47ULkksPSfSpFWbL9mCW9GaqiivCDtdk1q0fJdEn16fmmvNEYR5kCav6uvynehaV2OL12eVjS9fgCItS63GXYj0tYgtnZeijSTnRnOs+Xz//feBcM6KKlVUr6wu0uxbm2fNk6rRyLoiq4ryn6q5p9LzV0oUY7m0d71EaUmyXiVrZcryIj+pLBy18D3pmK7FZ4wxpsNTlgbVvXt3lltuufzuJ21G9npJ0pKWIWg10pQkoT722GNAiJJSFI9s1TqG7PNLL7000DyHRd8nKUdSmGr0ldNCO00hf4WOGUu6SGukMdC10bxefPHFQMgVOfroowG49NJLgaBBQMtcs3R05uabbw7AqFGjmr1PkZaSXFX7EELdOa0RXV+9zpkzJ9p8duvWjSFDhuTHq7WidZDsRyO0huQjVfSjpE7lesWokC7NTdpFupZlDM28tWjXcunatWte4y2XtG9Or9JmVcNQPilpk3feeScQNK811lgjf0yt3dVXXx0Ia0uVJeQbjdFXS8eI3Vetvr4+nz9a6PtrobloXUlbSvoMk10FoPy8r0Iae1qbT7+nX79+Jed/WoMyxhiTScquZj516tS8nVK2VO2QygVJ7sLyKUna0W4uLUdSd7pfkH4vf4ZspMk6VvpeSf6SHqvpUFqMZPWMmBXCa5UPofl79dVXgdCFU32LtthiCyDkm0HIIlcUnrQJaa/yMSl6T9qXNCZd/6QGlfQZQktpauLEidEiGZuampgxY0Y+10u2dq05fU9SekvXikv3NFMUqrSfSvwH6ftD2q3yoPRd5Wg/xSTumOupsbExSv1KCOPSvar+QvJFrb/++gBsueWWQJjnpMVE0r5qHJ511llAsNLE8DWnKaTtVENTU1N+HSSpVS1FCOeg16SmrnlWtGK5lW0K+T7TmlN6rdbX1zuKzxhjTMfGG5QxxphMUpaJb/bs2UycODFviiimlhZSYZOhx6WQdqrqtRZhn619f/rn77//PlqYeakN4SpB45W5S0EpCvtWAq9MWAAjRowAQoi1ylIpNF0N0VRiRsmtMuPJXFCKGUwq/sSJE6Ml6uZyOZqamvLH0zqVo1vJoMnxyQStoAgFfMg0qvmqJjRY60XHUtFYzX2MthvpEkwxqEUQj54DKuiq9BK1cFEhXZmatBaT71UAhdwEMQJDioXpK7gnFg0NDSy00EI1DYpIo/tBQSRjxozJ/033tp4PbT2nSxl3saRnUU7TV2tQxhhjMknZMZQxw6yzTLFQyf79+0cNPa223UapSIqS9KlE3mTpfYXvSrKXdvfUU08BIRVAUlZrLVDaIqkhxwzb79atW4uGgOnWDknHt94raVzliNSoLUa7AX1Wkn46ibUSDaDYeGJqPLXQ8NNBUNK+lVai66H1mkyq1rUoR1Mvd1xpYpc6UjJ5ez5D09/14IMP5v+veU+3dC9GJYng6etUTpCZNShjjDGZpCxVoGvXrvkSRR2RGGVgpkyZEs3OX1dXFz0RsBiSYuSTUpivXiE0KUvbmWsp7S2++OLRm8JJwyuWdpCUEqXBal7uvfdeIPgeYpSi0nymmx1W4jdqaw3H8ufB3LlRSkFsdO7pFi56rWXYdSlNT0W5vvO2iNnyvVS0hrXORo8enf+b7hGt/2JaqeZHY083Ay303mKU07LIGpQxxphMUrb43tDQ0KIMUFZ9UoXKvEPr4y72t6QUHPN8m5qa2jWip5TvqHQcrZU9Sb9Hmku3bt2iFTidOXMm7733XosSV+kxJKU+/V+f+eijj4CWyb3p8ReL+mpt7tLflR5fsWMnv6PY8XVPxmxYKH9Je6zPGMdOXwutsWLz3Nr36j0xNdLkuNpzTtMt39XqBoqvufTPWl/y36bXcHJO29LCZs6cWfJ5W4MyxhiTScrSoBobG5k0aRJnnHEG0LwxIQQ7ZnJ3lH9B5Vwk4SnaSH8vVu4mXZ4j6RPQ72QXlT1bO7jGp3FJCpBkpaggjU3nmDyWjh0zv0Qor+ySSy4BgoanOVFuTjLqRb/TPMifIr9Gep7kQ0g3E1SZneSx01KR3qv3DBkyBAjzq++WZKQxJKPkNF5dA71H8zpjxoxo0Viaz5NOOgkIjSslMWoOkj4vRe+p5I7Gmy4smyxuCy1bl+u8kj4b/U4ll/Sq89X86ljK+VHTOBW9TUbSpX1iOid9lwqCxmD27Nl8/fXXnHfeeUC4rjpnXcNkJKoiJtPFVrVWNF6ds85Ha0zzr/NJtlzXMZWfl55P/ZwuDpy+Rsn1mY70TBfuja3hNDY2MnnyZK666qpm3681qTlNjlFzp2ek1oXy6jTGpFUi+arv0NoodL+ln+W6TunC0WqPornUMzT5eY0z7ftVxGY5kbvWoIwxxmSSunIkhLq6usnAp7UbTodhqVwuN7Dag3g+83g+41P1nHo+m+E1GpeS5rOsDcoYY4xpL2ziM8YYk0m8QRljjMkk3qCMMcZkEm9QxhhjMok3KGOMMZnEG5QxxphM4g3KGGNMJvEGZYwxJpN4gzLGGJNJ/h+wLnRr4yfO4QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 12/100, d_loss=0.087, g_loss=0.126                                                                                                                      \n",
      "epoch = 13/100, d_loss=0.073, g_loss=0.098                                                                                                                      \n",
      "epoch = 14/100, d_loss=0.079, g_loss=0.086                                                                                                                      \n",
      "epoch = 15/100, d_loss=0.069, g_loss=0.108                                                                                                                      \n",
      "epoch = 16/100, d_loss=0.077, g_loss=0.101                                                                                                                      \n",
      "epoch = 17/100, d_loss=0.069, g_loss=0.110                                                                                                                      \n",
      "epoch = 18/100, d_loss=0.071, g_loss=0.151                                                                                                                      \n",
      "epoch = 19/100, d_loss=0.069, g_loss=0.115                                                                                                                      \n",
      "epoch = 20/100, d_loss=0.068, g_loss=0.113                                                                                                                      \n",
      "epoch = 21/100, d_loss=0.080, g_loss=0.103                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXewVOX9xj97UUBAREVEUbEX7F3sJXZHUaPBEmNL7KMxJqMJan46iTExYzQRDToSjR0dSzT23jX2iooVRVGKCigI7O8P5tn33MPuvXt239177uX5zDDL7t095T3vOe/3eb/lLRSLRYwxxpi80dLRB2CMMcaUwwOUMcaYXOIByhhjTC7xAGWMMSaXeIAyxhiTSzxAGWOMySUeoIwxxuQSD1DGGGNyiQcoY4wxuWShLF/u1atXsV+/fo06lk7D1KlTmTFjRqHe7bg95+H2jM+ECRO+KhaLS9WzDbdnIEZ7gttUVHvPZxqg+vXrxzHHHFP7UXUR/vnPf0bZjttzHm7P+Pz+97//qN5tuD0DMdoT3Kai2ns+0wAlfv/739fysy5BI87d7Zn/bXYW3J5xadS5u02rwz4oY4wxucQDlDHGmFziAcoYY0wu8QBljDEml3iAMsYYk0tqiuIzZkFjvfXWA2DDDTcE5oULJ5k7dy4A48ePL3320EMPAfD111834xCN6XJYQRljjMklVlDGlKFnz54ArLnmmgAceeSRAOy7774ADBo0qNX358yZA8Abb7xR+mzJJZcE4N133wXgvffeA+Czzz4DoFgsNuTYzYJNV8qFs4IyxhiTSzxAGWOMySVdaoqvUJhXe7B79+4A9OrVC4C+ffsCYdpG3/v2228B+Oqrr0rbmDlzZnMO1uQaTeH9+te/BmD33XcHQl9K061bNyAEUwBcfPHFAIwbNw6Ayy+/HIAxY8YA8PnnnwOe6quWNdZYA4BFFlmk1edffvklAJ9++mnTjylP6LnWlbCCMsYYk0s6tYJKK6ZFF10UgBVWWAGAzTbbDICddtoJgCFDhgBBWd17770AjBw5srTN119/HQhhw12dlpZgo/To0QOAhRdeGAhtMGvWrFavnZVaHL0KcNBrmrPOOqvib6XY1157bQCOO+44ILTz6NGjgXlLDwDMnj078/F1Nnr37g2EPpaFm2++GYB11lmn1eeXXXYZAKeddhoA06dPr+cQOx16Di622GIdfCTxsYIyxhiTSzqdglpooXDIAwYMAODHP/4xEPwEUkr9+/cHgrUmP4E45JBDAJg0aVLpsxkzZgAhJLirIuWktgJK69TstttuQJjTv+KKKwC45ZZbAPjuu++adpxdiVVXXRWAU089FYCNN94YCGvjPPzwwx1zYE1k1KhRAOy5556Zf6sZkjRKAZB/UPf1gsLiiy8OwMknnwx0LZ+mFZQxxphcklsFJb/S0ksvDcD6668PBLUEsO666wKwzDLLtPqNSsv85S9/ybzfQw89tMYjzjdqm5VXXhkIVubee+9d+s5yyy0HBEtUkWwTJ04Egqp85plnmnDEXQ8peCn7H/3oR0DwmT744IMAXHLJJUCITlMScGdCaue///1vq/crrbQSUDkashbUt+XfWlDQzNARRxwBwH777QeEmY6ugBWUMcaYXJIbBSVrQIppiy22AIKFr0ioZImZH374AQiRd48//jgAL7/8MhDm+BdkFDG21lprAXDQQQcBMHz4cCDMXwM89dRTQPBLqa3TryagiLFy1vsnn3wCBH+fCszqu3qv2YGllloKgDfffBMI6qMzFZtdccUVgaACdR8nfccmDssvvzwA22yzDRBKa3UlrKCMMcbkkg43azTq77LLLgDsuOOOQCjSqVdF1916662l37700ktAyNRXrooy9BdkBaUcnI022giAn/zkJ0Dwe8i/oRwSCO130kknAcG3J+tXc/0mIKUgv1KSZ599FgjtJqU0dOhQIPRtVUaQL+qoo44CQn6UlC3kS01tt912QCigC0EF7rHHHpm2pVmQe+65Bwg5TaYyav/VVlsNaL3US1fBCsoYY0wuabqCUtbz4MGDgZC7dPDBBwPB//HRRx8BcNNNN7V6f+edd5a2JeWUrp+XrI6woCFrfZNNNgGCctL71157DYC77roLgPvuu6/0W31H/kBVNpAilU/FBC699FKgfI6Ooh7VnqussgoQlJHUhtSXlOpWW20FhOjJZI25V199Ne4J1IEWb1T+TVtcd911QFDuadQvX3jhBaA2BaX2VYTqtddem3kbnYkddtgBCDMdjzzySMP2ped2s3OsFtwnuTHGmFzTNAUlVaP5UuUzKe9o2WWXBUIE3tVXXw2E+luqXlBNPbiYORadBVk4q6++OhCUk/wdL774IhCqFui9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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 22/100, d_loss=0.067, g_loss=0.099                                                                                                                      \n",
      "epoch = 23/100, d_loss=0.067, g_loss=0.123                                                                                                                      \n",
      "epoch = 24/100, d_loss=0.068, g_loss=0.134                                                                                                                      \n",
      "epoch = 25/100, d_loss=0.067, g_loss=0.115                                                                                                                      \n",
      "epoch = 26/100, d_loss=0.076, g_loss=0.169                                                                                                                      \n",
      "epoch = 27/100, d_loss=0.067, g_loss=0.087                                                                                                                      \n",
      "epoch = 28/100, d_loss=0.068, g_loss=0.122                                                                                                                      \n",
      "epoch = 29/100, d_loss=0.067, g_loss=0.126                                                                                                                      \n",
      "epoch = 30/100, d_loss=0.067, g_loss=0.175                                                                                                                      \n",
      "epoch = 31/100, d_loss=0.067, g_loss=0.137                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXmYJWV5t+/uYUYYtpkBUdQRBQTFFVABE1REBFEUXHCN5NIAkkQCIRchkU3x0sstRmJUjBg3UEEENwwgqLigCAoIqCwKKpsgDAMMyyz9/cF3n7e6pnu6zzl1uqt7fvc/3X36nDpVT71V9ezP0MjICCGEEELbGJ7uHQghhBDGIg+oEEIIrSQPqBBCCK0kD6gQQgitJA+oEEIIrSQPqBBCCK0kD6gQQgitJA+oEEIIrSQPqBBCCK1knW7evP76648sWLBgUPsyY1iyZAn33XffUL/bmT9/fuTJw/JctmxZ5Nkgt9xyyx0jIyOP7GcbkWehCXlCZCqTvea7ekAtWLCAQw45pPe9miV84hOfaGQ7CxYs4OCDD25kWzOZk046qZHtRJ6F448//sZ+txF5FpqQJ0SmMtlrvqsHlBxzzDG9fGxWcMIJJzS+zeOPP77xbU7ld/WzzbbtTxu/u5ttTvf3zzYGdezTIdMNNtgAgGOPPbbz2i677ALAhz/8YQDOPfdcAJYtWzaw/ejm2BODCiGE0Ep6sqBCCCHMDB7xiEcAsM022wCw3377df63xRZbALDJJpsAMDzcLpulXXsTQggh/H9mtAU1b948ALbeemsAttxyy1F/qx2ss87Dh7ly5UoALr/8cgDOOussAO66664p2uMQQphajD294AUvAOAxj3lM53/eG9tKLKgQQgitpN2Pzwpz584FipUEsPPOOwMlE0Uf6xOf+EQANtpoIwBuuOEGAK655hoANt54YwDmzJkz4L1uD/Pnz5/uXQghTAPWXe2zzz5AuZcC3HPPPUDJ2tPL1BZiQYUQQmglrbWgfMpvttlmAOy4444A7Lbbbp33vOIVrwDgkY98uMD73nvvBYrFdPbZZwPwox/9CICf//znANx9993A7I49DQ09XKStbJRfCG3E7DG1/ac97WkALFy4sPMe1/SqVasAuOOOOwC46aabAPjzn/8MwP333z8Fe9x+jD099alPBeB5z3seMDpT77LLLgPg5ptvBmD58uVTuYsTEgsqhBBCK8kDKoQQQitpnYtP83PzzTcH4FWvehUARx55JFAKygDuvPNOAH76058C8LOf/QyA8847b9TrDz300KB3uzXUXXt77703AAcddBBQWpmEZjBNt7oum8ZCS4AHH3xwYN8zneja23333QE4+uijAXj84x/feY/uJ93/V199NVDW9DnnnAPAxRdfDBRX4NqG9wDLbd7whjcAZR395S9/6bz3jDPOAEoC2YoVK6ZsPydDLKgQQgitpHUWlCnge+yxBwDvfOc7gZIm/eMf/7jz3pNPPhmACy64AIDbbrsNWHs1Jyhy2n///QE63ee32247IBZU05jEo5wHkaa77bbbdn6/8sorgdm3xi0ROfTQQwF4ylOeAsCZZ57Zec91110HwNOf/nQAnvWsZwHwjne8AyiF+crIZIn1118fKNZn1aMyMjLS9KFMO+uttx5QZLjnnnsCxQL9/ve/33nv17/+dQBuueWWKdzDyRMLKoQQQitpnQW11157AfDv//7vQNEUtaS+8IUvdN5rkZmawWzUhrrFIuVdd90VgCc/+cnAYDVufd5rk/zVyrfffnsAjjjiCAA+8IEPNP5dr3zlKzu/L126FCilFLMF4yMbbrghUK7tf/7nf+68x5izcT9lr7dFC0kvwjOf+UwAPv/5zwPwX//1XwCcdtppnW2aXj3VNDluo74t4/fPeMYzgOKVeuCBBwD4v//7v857LblpK7GgQgghtJJpt6D0l2oxyamnnjrqb7OkDjvssElve20crKiGbdGyWuWll146bfs0G3nCE54AlFjfuuuuO7DvssASStH5bLGgtIY23XRTALbaaiugFOG6jmH1AlwL73/7298CpXWZFsQHP/hBABYvXgzA7373O6D9VkO/KEtjcqIsr7/++s5rbc9wjgUVQgihlUybBaVf9IUvfOF07cKsxHYvZjhedNFFo17fYYcdpmfHZgmLFi0C4DnPeQ5Q1q9xuEHgd0HJYLPmb5CjuacCPSi2NDIWpbW0prim77F2x5jL3//93wMly2/JkiVAyfKdrbVkj33sYwF40YteBJTxGrZ0+8pXvgKU+jEocam2EgsqhBBCK5kyC0r/sBqgvnv96z/84Q+naldmNWpEl1xyCQBXXXUVULL4vvGNb0y4Dbt5eG7USM2WMg7yN3/zN8Dakb1XH/r2pje9CSjxDmWgrKDI+pRTTgFKHNA4YR3lbk2QVrAZg1AsjerIhJmMnpRHP/rRQLlPeMxrskwdvGfGqqPMtWqtSTOLz6aybRsp0S92jHCcxr777guUbjK//vWvgVLzVO0k0fZ6ulhQIYQQWsnALSh9ytbj/OM//iMAr371q4FS7xALqlnMzukmS0crQcvpzW9+M1B82tahnH/++cDaMdZAjd7xD2qnf/VXfzXqfVbif/e73+289j//8z8AXHHFFcDE8tIKM4NtrL5os81a9Rhdp1qRVatRtKYcH2HNpHViz372s0dtU0v/s5/9LFDisLNNhq5N5aGX6vbbbwdK54jLL78cmFkWZCyoEEIIrWTgFpRj1/WPqpXrQzfLLEwtaqOPe9zjOq/ttNNOABx44IEA7LLLLkDJevJcaSXMJE2sV6yhednLXgaUeIeavnENZVLtdPKrX/0KmLyl6TaNKRiXmTdvXu8H0HKMh1ijZK2OslD+UO4lr33ta4EysNQ17LaMvxrDs06qbcP4msLjNyZnTd4f//hHAM466yygWOYziVhQIYQQWsnALSj7Yjly3JiUsafZko00U1D+1ky87nWv6/zvLW95C1Bm8Nx3331AmbPz6U9/GoDf/OY3U7Oz04j1OS9/+cuBoq1bna/l9K1vfQso2rpWE3RvYar5+l3OSKpmXdkFYbZYr8aLPEa1fjt1mC0JJe5nDEoZKHMnHXzpS18Cyjy42Y7yMGvPe6sznow9jYWeFNeaa7CePamsrSmbqlqyWFAhhBBaycAtKPPsfapbA6KGas3CILQdv8MModmidfZCPZvSLtH686FYs2qxaqLW8VQr0Gc7dsJ+4xvfCJQuBdaZ2cnBTtJVK6db7EdnzMk4l94Hs9CgZFBWe9TNZMySFDVzr92jjjqq8z+v3z/96U9AWZeuUy2GtveXaxqnjlsjp8fjf//3f4GSfTsW1qGZVW1GYN2z5TaMZzlza9CWVCyoEEIIrWTgFpTazj/8wz8A8PGPfxwo0x7VEtUem+TYY48FSgX12uKTrqJ2bm2Ec4vUuqoZYnaH/shHPgKUzLR+rIOZirEP52tZO2NGmLJZk3Y6WczCcl6R9Tz2jrvwwgs77zXbbabjdW+fQbN7jT1JNfPO2OeJJ54IwNlnnw3ArbfeCrS/K8KgMLvRWrwf/OAHwPi1pdUas3/9138FiifF2HR9xps/3/a2twHlfu51oIesaWJBhRBCaCV5QIUQQmglA3fxaRpqAl522WVAMdctyDv88MMb/24LTh0xoTlrWupsTprQRH/uc58LwCGHHALA3nvvDRS5V8c/f/KTnwTgJz/5CVBce2uj68R0cts/WWz7i1/8AijtY3ppm6Nb1YLc17zmNUBx7elG/NjHPgaU9OnqfsxUTNJ5wxveAJQ0fl2puqu8NqslDSb21Jvuro3rs4oJUBbi6hqut8oy8aE64sj7gQXRtoPSPeh92/NlIoZNkw2bxMUXQghhrWLKBxaapjsVg7Kuu+46oFgRWlT11ODZpIFZaPeSl7wEKCMx1HjExBG1dCgFfRaDzia5TER9HIwapfJUo/z2t78NwI033tjzd7ltm5xaIO13fe5znwPg3HPPBYpWCzO30alttA466CAAdt99d6BYk9deey1QUsRtWGySD5TyBwfwzWS8B3WDFpBtt0xm0lvy+9//ftRP8f9ap9XifIvyvRfqUTn99NOB4ml50pOeBJQSiOc///lASXozQaNpYkGFEEJoJdM28r3OMccc09i2bJqoT9bUalvIWGTmCOQmUoXbgv5ltXJHZaiZnnHGGUDR0qup95MtulPrVfsyZdhCybaPkR4Lj8H0cteQx2LsyRhqN8eo5mvxr5aTPy2W9Jw46FCtdKyxGzMFU5oPOOAAoGj/auYWlfrzUY96FFC8HtUyiDUNL1ybGE8OxoHq8SDbGFmMW41BabWfeuqpAHz1q18FiofANes29KronRr0tR4LKoQQQitpjQXVJDfffDNQsn304duw1niM8YTZYEHZKFKtXB+xGs/3vvc9AD71qU8BpSh3MpmMallaTMrROIHxm49+9KMAXH/99Z3Ptl3717qxQFENX41Ri8m1ZIbUZFD7t8mpvv8Xv/jFQLHa9PufdNJJANxwww3AzM4yVcvXgnKtaKXbsunLX/4yUORr4W7b1810YPxRq6Uuo8022wwoGZHG7My8c9hmtSmCWaG+Vwt25513Bkpm6ZZbbgmUe6sxbOPVgyIWVAghhFYycAtKTUptUi3AFiaDyEpSa9t0001HfbfWhI02Z1OW2m677QaUIYM227Re54tf/CJQmpyOJXflpBblT9vPGBd46UtfCpR2VWph3/zmN4HS3grarwlrHVqfY9shs8ccfmft3HhNWl3nygxKg1kz18xkU15a8A45tP5pJltOojwWLVoEFDlrOTm6xdhe3ToYa7jg61//+sb3s5dsuunC+5XxIVs8uWa32247oMSaXIvGn71ejf9BWWveP4yHbrPNNqO+2/iy58/aPEfyDIpYUCGEEFrJlA0sNBtEzUpfvj5MNW191MuWLRtze9WsHq0EYyB+lwO89tprL6BoEvr2rWmZDSMLrCI3+2yrrbYCykA9LSh9/GanbbjhhqttS4vTWgczAG3B7/+1LtRy1dCM58ykbCvXjPVPriXX4R/+8Adg/Nob16NW5h577NH5n5lrnhP9/GbpnXbaaUDJKp1NKEe1di0oNe8rrrgCKBaTWr0D8bQyM9C0oAXl2BvvY649f9oFxXi02cz+v+o9MdbquvXa9TyY5evIF7OAp8ozEgsqhBBCKxmIBVXVoPWPfuhDHwJKttRVV10FwEUXXQSUTDvz682e8kmtRlZtx6/WqzVgxokZbH63mut73/teoAw4m8mDzdQ4zdgxy8b42+233w6UrgX2OtTHrM+5qqEqR9+jpaSf2nOh39mMHjME1YrHs37bQrU7gevR+IYWUX2MuBapcldu2267LVDWt3E6KFaDsSUH7Fmlr0U/G/EeoIWq3IyTKHdlo3XgNela0+IPq6MFvv322wOlb2Q9vqyVpFW0pri/5831773SmtGpJhZUCCGEVjIQC6r6hDbj5B3veAcAhx56KFC6Ouy5557A6hqUMYD6076q8auh+tRX07euyepotdt6v6+ZTD070p++bjafdSX1z1WtiPr/xPigPfochKalZFxLa824QduzI6vHblzNrCUtdTVHBwRqCajR77PPPgAceeSRAGyyySbA6GNXTieccAJQ4oGDznxqA1pArh2tauObdsxXvmNl7cHqI+FDQSvHYYNNysp76XTfK2NBhRBCaCUDz+LTEjLmdNxxxwFFg7Ji2XoJ0XLSMth8882B0TU2aqv+vPjii4ESN1A7M7413dpAkygfrRxn46i5aiWMp1X5eTN8oFSHq/V6zsxks8eXlpJa8Uyr26laiv5ujES5uFbMZLSGyRiTlpQWmDJxphaUGIEzjbScZmpH8m7wmrSryAUXXACUGjq7GpjNawduu7xokQ6qS/ZswOtuNmQjj0csqBBCCK1kyibqWu9gTOrMM88ESi5/tb6pihaANU/VDLF6rENrwJjIZLtzz0Q8djXQ73znO0Dpx2XfPONxv/zlL4HSSUJLy9ehVIs7G8asn9kmx6rFp+WjnOxb9ta3vhUo69daOv+vNaRlYG2TXbmhWJ6zyXLvFuVrPNiaMGNRThXWOje7z+veOGdYO4kFFUIIoZXkARVCCKGVTPm4DV0mJi5Ux1mH7tF1aiGdqfQGmQ2gWhRqIbTnwWJbGD/Vd7ZRbdOiG84iWhu72t7JhpwWe5tqbyKJY0ssLNc9CmtHMsRk0ZX8mc98BoC9994bKC3QLDTXtWeT3pNPPrmzDQtSw9pDLKgQQgitZFYOLFwbMSXcn2F8qsk1pjE7/kGL1KQdLShbHZk2rSWqxRRrac2YVOJwRtPKbX1kGYkWlPI977zzOtuIBbX2EQsqhBBCK4kFFdZqTKF35MVRRx01nbsz67Gw3KJ6f4YwFrGgQgghtJI8oEIIIbSSPKBCCCG0kp5iUI4PCM1w/PHHT/cuzCoiz2aZzfKcrmObzTJtklhQIYQQWslQN/UbQ0NDtwM3Dm53ZgxbjIyMPLLfjUSeHSLP5ulbppHnKLJGm2VS8uzqARVCCCFMFXHxhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgleUCFEEJoJXlAhRBCaCV5QIUQQmgl63Tz5vXXX39kwYIFnb9HRkZG/X94+OHn3apVq1Z7T/1/Q0NDo/72/75e/3z99bHwvfXv9Gf9/26zehz1/fLvOXPmALB8+XLuvvtuli1bNvEOTYDyrMuxTvXYx5NffRv+7f8f8YhHjPqcMpk7d27nM8uXLx/1Wd+zzjrrjPq7fi4feOABoMho5cqVnW36e/0zfte8efNYsmQJ9913X9/ynD9//siCBQu6WkP1Yx1PjjLWGoeHj6P+up9VfuOdZ/fL9ykbv2vFihWd99Zl7WeqMge45ZZb7hgZGXnkmF84SerXe52x5DretVU/9vq5GE+uazpn9ff4c7w1599rOhZRvsr+1ltv7VueUGTqOfZ76tf1mphoffu3+15fh94LANZdd12grDl/PvTQQ2N+p/eL+nqrMt791mvkwQcfZOnSpZO6h3b1gNp444058MADOeGEE8bcgbbSyw2rjkL/t3/7N04++eRG9mujjTbigAMO4P3vf/+o717TxdyvrD0OF+YjH1muufoF7gJftmwZsPriffDBB4HVbyrdcPjhh3PKKaf0/PkqCxcu5OCDD+b4448f9fpUrM/6gx/KBbnBBhuMek9dvuLNaunSpaPe183+/+d//icAhx122I3dHcHqeL2/+93vHvX6INdnW/CY3vWudwFw7LHH9i1PgAULFvD2t7+d4447DphaefmAetzjHtd57YUvfCEA5557LgB//vOfgdUfbhOxpjVQVyCOOeYYPvWpT01qu3HxhRBCaCVdWVBDQ0PMmTNnxlhOazLpq0zmOHzPuuuuO+ntTsTQ0BBz586dUnnWXVpVC0pLSe1JS0nNS4vpzjvvbGx/m5SnTMe69Durrg/lqGWk1Vp3nd5///1Akfd4btvJcNttt3X9mTUxGeuo7feBXvCY1ltvvYFsezpk5rnUagLYc889AbjooouA1V2bk6Wbe2g3xIIKIYTQSrqyoKQtGlM9cOfPTTbZBIANN9wQgLvvvhsoFoI+/l401RUrVjR6/MPDwxNur8nvU2bKaKeddur877rrrgNKzMQYij5r5fi1r30NgPvuu6/v/Vm5cmVjxzc0NNSxUqaLqjU4f/58AB7/+McDsHjx4lGva0HdcMMNANx+++2jfvaC56wJhoeHWW+99VpzvU8HJqU0xYoVK1iyZEmj25yI+jV/0EEHdf6nxe/a/O1vfwt0f89ZU6JMnW7uobGgQgghtJKuLKiRkZG+Mrb6wafxwoULO6895jGPAeClL30pAI961KOAYgG4r+eccw4AV155JVAsqG60BN/70EMPNapRrildU5rMktLHvMUWWwCw2WabrbYvynHz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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 32/100, d_loss=0.066, g_loss=0.106                                                                                                                      \n",
      "epoch = 33/100, d_loss=0.066, g_loss=0.136                                                                                                                      \n",
      "epoch = 34/100, d_loss=0.101, g_loss=0.099                                                                                                                      \n",
      "epoch = 35/100, d_loss=0.066, g_loss=0.136                                                                                                                      \n",
      "epoch = 36/100, d_loss=0.066, g_loss=0.150                                                                                                                      \n",
      "epoch = 37/100, d_loss=0.066, g_loss=0.151                                                                                                                      \n",
      "epoch = 38/100, d_loss=0.068, g_loss=0.094                                                                                                                      \n",
      "epoch = 39/100, d_loss=0.066, g_loss=0.095                                                                                                                      \n",
      "epoch = 40/100, d_loss=0.068, g_loss=0.108                                                                                                                      \n",
      "epoch = 41/100, d_loss=0.071, g_loss=0.070                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 42/100, d_loss=0.066, g_loss=0.117                                                                                                                      \n",
      "epoch = 43/100, d_loss=0.066, g_loss=0.099                                                                                                                      \n",
      "epoch = 44/100, d_loss=0.066, g_loss=0.101                                                                                                                      \n",
      "epoch = 45/100, d_loss=0.067, g_loss=0.083                                                                                                                      \n",
      "epoch = 46/100, d_loss=0.065, g_loss=0.121                                                                                                                      \n",
      "epoch = 47/100, d_loss=0.067, g_loss=0.077                                                                                                                      \n",
      "epoch = 48/100, d_loss=0.065, g_loss=0.087                                                                                                                      \n",
      "epoch = 49/100, d_loss=0.065, g_loss=0.105                                                                                                                      \n",
      "epoch = 50/100, d_loss=0.065, g_loss=0.118                                                                                                                      \n",
      "epoch = 51/100, d_loss=0.067, g_loss=0.096                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXeUW9X5tZ8ZN1wZTDfF9F5N50evpvceCGQRSgghrFACNmBwTMoioZhFDQQINVSbjqmhJDahd0zv3Q0bd31/+Ns6V9fSjDQ6mrma2c9aXvJIV7ece67Ou89bTkMul8MYY4zJGo3tfQLGGGNMMTxAGWOMySQeoIwxxmQSD1DGGGMyiQcoY4wxmcQDlDHGmEziAcoYY0wm8QBljDEmk3iAMsYYk0m6VrJxr169ck1NTbU6l7ph4sSJTJs2raHa/bg95xGrPXv37u32/P988cUX3+VyuUWr2YfbMxCjPcFtKiZOnMjUqVNbfOYrGqCampo49thjW39WHYQrr7wyyn7cnvNwe8bnnHPO+bjafTQ1NXHcccfFOJ265+yzz666PWFemx5//PExdlXXXH755WVtV9EAJYYNG9aar3UIanHtbs+4nHPOOdH3WS+ce+650fd59tlnR99nS5x33nnR99ma66jFeQCcddZZNdlvPTB8+PCyt7UPyhhjTCZplYLKOiuttBIAe+yxBwCbbbYZAB999BEQLOyffvqp7U/OGGNMWVhBGWOMySQdSkENGDAAgF133RWAn//85wAsuOCCALz22msAeA0sY4zJPlZQxhhjMkmHUFD9+/cHYNtttwVgzz33BKBXr14A3HDDDQDccsstAMycObOtT9EYU4QePXoAsMwyywCw+uqrt+fpmIxhBWWMMSaT1LWCkm9pyy23BGD//fcHYJ111gHg2WefBeCyyy4D4Ouvv27rUzTGNEPXrvN+glZccUUADj/8cADefvvtdjsnkx2soIwxxmQSD1DGGGMySV1P8W244YYAHHHEEQD83//9HzCvECHAuHHjgM41tdevXz8AFl10Xl3Lnj17AvDjjz8C8OWXXwIwY8aMVh9D+1xqqaUA6N27d8E+v/rqq/y2kydPBmDu3LmtPp7puEybNg2A9957D4Dx48e35+mYjGEFZYwxJpPUnYJSWCrA3nvvDcDmm28OhATcW2+9FYCRI0e28dm1H42N82yN7bffHoCTTz4ZgA022ACAxx9/HIChQ4cC8Morr1R8DCmn9ddfH4C//vWvAGy00UYAfPLJJwAMGTIk/537778fCEqq3mhoaCh47datW8Gr2l2v5TBnzhwAZs+eXfS1MyWS61rff/99AK644goAfvnLX7bbOXU0KinOWi5tVezWCsoYY0wmqRsFJeV0zDHH5N9TMVj5W26++WYARo0aBQS/S2dg2WWXBeDAAw8EYN111wVCu2299dYA/OEPfwBC25XDAgssAASlevrppwMwaNAgIKgHJVuqWC/MW/8G6ldByaena9tuu+0A2H333YFwrYsssghQnvpR0WKpWr0+//zzQPCZdiYlJaZOndrep2AyhBWUMcaYTJJ5BaVEPlmwSuQDWGKJJYBggf7rX/8C4I033mjLU2xX1D777LMPAOuttx4QyjzJd6K/F1988YqPsemmmwJw4oknFvytYwspqS5duuTf0/Gzjs5TBYc33nhjAHbYYQcg+PLUfrrW6dOnAyEKTe0MQb1KgSqxXOV8ll566YJjPP3000DwD44ePRoojELt6NGQ6T5lKkdJz1L7teDiiy8G4Pbbbwfg5Zdfzn8Wc+bKCsoYY0wmyby5orl9RfWsssoq+c8mTJgAwF133QXA2LFjgWDVdmRk8cv/piVGZJWno8q0fVLdtIQUqhSTovWU95RGlv5nn32Wfy+LfsCkqltyySWBoMy32GILABZeeGEAvv/+ewCee+45AD788EMgXOu3334LwKxZs4BCBaC2VnvpWKuuuioAK6ywAhCKHe+7775AKHqsnLUnn3wyv8969eWViyJFTeVolmm//fYDwnJD+n2MyUEHHQSEZ0nPAcA777wT7ThWUMYYYzJJZhWUrE9VKzjggAMA6NOnT36bMWPGAKFixHfffdeWp9iudO/eHQhRe6utthpQ6AOpFhXdVfSeVIWQP+Sbb74B4KqrrgLgmWeeyW+TJYu/b9++AKy99tr59/baay8g5NSp38mfqci6d999FwjKScqwHLWunCn13cUWWwwIfq6f/exnQPBvSVFJeVWSY1XvqP2lZKUmAY4++mgA7rnnHiCo286OfJ3yZeo3YY011gBqo6CkdD///HOgdtGXnafnG2OMqSsyp6A0h6/5eVm4yy23HBDq7AE88MADQKhg0JnyRtROqj8odZBG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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 52/100, d_loss=0.065, g_loss=0.107                                                                                                                      \n",
      "epoch = 53/100, d_loss=0.362, g_loss=0.265                                                                                                                      \n",
      "epoch = 54/100, d_loss=0.064, g_loss=0.124                                                                                                                      \n",
      "epoch = 55/100, d_loss=0.066, g_loss=0.082                                                                                                                      \n",
      "epoch = 56/100, d_loss=0.064, g_loss=0.162                                                                                                                      \n",
      "epoch = 57/100, d_loss=0.065, g_loss=0.142                                                                                                                      \n",
      "epoch = 58/100, d_loss=0.066, g_loss=0.097                                                                                                                      \n",
      "epoch = 59/100, d_loss=0.065, g_loss=0.106                                                                                                                      \n",
      "epoch = 60/100, d_loss=0.065, g_loss=0.097                                                                                                                      \n",
      "epoch = 61/100, d_loss=0.076, g_loss=0.095                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 62/100, d_loss=0.064, g_loss=0.095                                                                                                                      \n",
      "epoch = 63/100, d_loss=0.065, g_loss=0.097                                                                                                                      \n",
      "epoch = 64/100, d_loss=0.064, g_loss=0.104                                                                                                                      \n",
      "epoch = 65/100, d_loss=0.065, g_loss=0.097                                                                                                                      \n",
      "epoch = 66/100, d_loss=0.065, g_loss=0.099                                                                                                                      \n",
      "epoch = 67/100, d_loss=0.064, g_loss=0.117                                                                                                                      \n",
      "epoch = 68/100, d_loss=0.065, g_loss=0.085                                                                                                                      \n",
      "epoch = 69/100, d_loss=0.064, g_loss=0.163                                                                                                                      \n",
      "epoch = 70/100, d_loss=0.065, g_loss=0.122                                                                                                                      \n",
      "epoch = 71/100, d_loss=0.065, g_loss=0.058                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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qLSb3ofQPrFcJdAeffRRINv3ci1YgzLGGJNLulyD2mSTTYDQSE/2UpUnagT5nA4++GAglDZSU0S1lU+zMG1Xo/FTCRMl3+6///5A8CNpfKM2aPnmXK7HpI180JqXQ4YMAUIBZ5M+it7beOONATj88MOB8I6Iojbxzz33HBDaa3RV9J6wBmWMMSaXZK5BSVJXJJj+ragQaTXykajFu4qZ1tJSWJKCItWkOY0dOxYIZX1WX311ILT2kP+rJ+VDKdfh2GOPBeCII44A2uc4qQSSSs1AKNwp+/Ps2bObcMamN6D8J1lMpLk/+eSTQIgmVYPNCRMmAMHaAUH719xWeTTl502cOBEI0n9vR2XN9t57byD4oytpULIiffjhh0B4X3c11qCMMcbkksw1qMWLFwPwyiuvAPDWW28B7YvFykei1V22UOVJSeKP5u3IV6LS/bJvS2KQBiXpTRqTWr/r3HoC0g6PP/54AH70ox8Bwdavwq9q2axx1n2AEOXjNtwmbeRj1rMqf+e0adOAUMj5pz/9KQCHHXYYECwpEPwksrYor0damKofmFWoXc53v/tdoDx6L46aHEqDyksDTmtQxhhjcknmGpRq682aNQuACy64AIDLLrsMCBnlav2sz1NOOQUIuThz584FYOTIkaV9SwqTPVtahP4tm7Xsq2rOF2/i1xOQ7X733XcHgsQqe7yqQ6idyZFHHgmUZ/L3pPHIA3F/a29Gkrkkdfmi9MzK13TWWWcB8L3vfQ8IPmoIvmblUr377rsAPP3000DQsHo7sixJY1p33XU7/c2nn34K5K+qjjUoY4wxuaRpeVCSJh977DEAbr75ZgB+8IMfAEGikm9EvqYRI0YAoX6UtCaonq+zbNkyIEhYt912GxBalefFvpomknw0ftKGVIn8kUceAULb53gNLtMYlVq+y++al4iorkQSuqpj63lXlKkiRv/6178C4T0xevTo0j4uueQSIFTgv+eee4Cur3aQN+Tn22677co+O0L+O2m4ecEalDHGmFzS9EoSisa74oorgCBlKuJOPhRJToMGDQLKNac4igSSLfqFF14o+172b2kZWfSc6mo0rt9++y3QvhqxNCv1gRo/fjxQHhUpSbQn5YVljTLt3377baC8Aor8J5JoezPyw8knetRRRwGw2267AXDGGWcAoRW8eripCgKEaFxF+N5www1AiPQ1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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 72/100, d_loss=0.064, g_loss=0.086                                                                                                                      \n",
      "epoch = 73/100, d_loss=0.065, g_loss=0.061                                                                                                                      \n",
      "epoch = 74/100, d_loss=0.064, g_loss=0.106                                                                                                                      \n",
      "epoch = 75/100, d_loss=0.064, g_loss=0.125                                                                                                                      \n",
      "epoch = 76/100, d_loss=0.067, g_loss=0.130                                                                                                                      \n",
      "epoch = 77/100, d_loss=0.064, g_loss=0.129                                                                                                                      \n",
      "epoch = 78/100, d_loss=0.065, g_loss=0.080                                                                                                                      \n",
      "epoch = 79/100, d_loss=0.064, g_loss=0.117                                                                                                                      \n",
      "epoch = 80/100, d_loss=0.067, g_loss=0.070                                                                                                                      \n",
      "epoch = 81/100, d_loss=0.064, g_loss=0.071                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXewVOX9xj/3IoiAgmAFrIgNe8GSoKLGbtQYWyxxdNQYkxCTaGZiMrYRC2rGKBN11EFj1GCMvYu9oWLD3kEBsQAiVZH9/cHv2ffsYffeLe/ee/be5zPDLPfes2fPvufdfb/Pt71NuVwOY4wxJms0t/cFGGOMMcXwAmWMMSaTeIEyxhiTSbxAGWOMySReoIwxxmQSL1DGGGMyiRcoY4wxmcQLlDHGmEziBcoYY0wmWaaSg3v06JHr06dPva6lYZg1axbz5s1rqvU8PXv2zPXt2zfGJTU0M2bMYO7cuTWPp+dnYNq0aV/lcrmVazlHz549PZ7/z9SpU2seT/CYilmzZpX1ma9ogerTpw8nnXRS9VfVQbjqqquinKdv376MGDEiyrkamcsuuyzKeTw/A2edddakWs/h8QyceeaZNY8neExFud+hFS1Q4qyzzqrmaR2Cerz30047Lfo5G4VRo0ZFP6fnZ1zOPPPM6OdsFM4+++y6nNdjWh6OQRljjMkkXqCMMcZkEi9QxhhjMklVMai2pB4+9c4cozD1pUuXLvn/L168GIANNtgAgOHDhwNLAuUA77zzDgDvvfceAG+++WabXacxjYAVlDHGmEySeQVl2p8NN9wQCEpAlv4HH3zQbteUNbp27QrAPvvsk//dZ599BsABBxwAwGGHHQZA7969AXjjjTcAePLJJwH4/PPPAZg5cyYQFJgxnRUrKGOMMZnECsqUpEePHgDsvffeAOy3334AXHzxxYAVFATltO666wIUFGFOmTIFgF122aXgGLHjjjsCsPLKSxoUfPnllwDceuutwJIOG9CxlFSvXr0AWGuttQBYZZVVAOjevTsA3bp1A2DhwoUFv0+ieffJJ58AMGfOnPpdsGlXrKCMMcZkEi9QxhhjMoldfKYk66+/PgBDhw4FYPnllwdg8uTJ7XZNWaGpaUmfS7nnDj/8cADWWGON/DE777wzEFx0SoL4/vvvgeDu2mSTTQA4//zzAXjrrbcAeOGFFwCYP39+nd5F2yHX3bbbbgvAL37xCwC23HJLAJZddlkAVlhhBSCM0YABA/LnkLvv+uuvB+CKK64AYMKECQDkcrn6vQHTLlhBGWOMySSZUVCySEVzs9fO9ma33XYD4Mc//jEAL7/8MuCCUggW/8YbbwzA6aefDhQG9RcsWADAq6++CsB9990HwLRp0wAYNmwYAIceeigQinx33313AN59912gYygoJYj84Q9/AELpwuOPPw7Ao48+CoTEnB122AGAQYMG5c+x0UYbAbDrrrsC8OyzzwLw2muvAUF1dXb03bnMMku+3tPfrcliciX56JhFixYVPEqV6vG7776r12UXxauAMcaYTNLuCkq+acU3ZJkOHDiw3a6psyPLa7XVVgNCKrAJrL322gAccsghQJi3yZTwF198EQhbK4wfPx4IVquU1ccffwzAKaecAsARRxwBwN133w3A119/nT9no6qEIUOGACFG98gjjwBhL7CPPvqo4Pibb74ZKPSkbLbZZgD89re/BeCHH34AllYInR2p1e222w4IrbWknBQHhBAnVexP8TypU8VNVfJw5513AjBv3rz6vYEEVlDGGGMySbsrqIMPPhgIWVD9+/cHglV0zz33tM+FdTCkgrbYYgsgWEDPP/98/hj5nXWsiil1LxQ7McEqVQaelM3999+fP0YFzVJKikmpCPWLL74Almx/DUt2WAZYccUVAVhnnXWAEIsC+Oabb2K/lTbhq6++AkI8bfDgwUDIFFXDXCnQYrEOzVmdQ8d0pELmYkhFKmP0j3/8IxBaj6WLmaWGVl11VSAodp2nZ8+e+WOVSSp1tf322wNhXmuMv/32WyCor4suuggIc7he98AKyhhjTCZpdwUlqyBtUU2dOrXdrqkjodieMp9GjBgBwF133QXASy+9lD9WCmrNNdcEgpKS9fv++++3wRU3BoobXXPNNUDwACgbDYLySfvrlREl5TRx4kQgZKNtvvnmQGgt9fbbb+efq2MbreZH1/3YY48Boanu8ccfDwSr/7nnngPgww8/XOocGvNrr70WCPERxaI6KiuttBIAJ598MhCyPvv16weEmLHmhNSQfl9JRrSyKPUo9N2gnIGxY8cCYQ7LOxAbKyhjjDGZpN0V1KeffgqETKX06m+qY7nllgNCDdNxxx0HwHrrrQcEhVrMdywLXkpKTTlVB2VC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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 82/100, d_loss=0.064, g_loss=0.088                                                                                                                      \n",
      "epoch = 83/100, d_loss=0.064, g_loss=0.199                                                                                                                      \n",
      "epoch = 84/100, d_loss=0.064, g_loss=0.188                                                                                                                      \n",
      "epoch = 85/100, d_loss=0.064, g_loss=0.109                                                                                                                      \n",
      "epoch = 86/100, d_loss=0.064, g_loss=0.083                                                                                                                      \n",
      "epoch = 87/100, d_loss=0.070, g_loss=0.079                                                                                                                      \n",
      "epoch = 88/100, d_loss=0.064, g_loss=0.177                                                                                                                      \n",
      "epoch = 89/100, d_loss=0.064, g_loss=0.205                                                                                                                      \n",
      "epoch = 90/100, d_loss=0.064, g_loss=0.245                                                                                                                      \n",
      "epoch = 91/100, d_loss=0.091, g_loss=0.091                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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Fy9ePOm/RYsWTfg3SH/ot++TTjqpe9JJJzXSnt1ul6222qp73HHHtaZN5+LfMPd8pvhCCCG0kqGm+DqdDp1OZ6CpvIXK/fffP5ScnYput8sDDzww1vZU9m+00UbrfOYUia+jxHO+/fbbJ50imuk+/QfrZ/+8++67G9tXp9Nhgw02aKy/z5b6da1Px9enFX21fw3Sz+pT4Lfccksjxy5LlixhxYoVrWnTuWCYez4KKoQQQisZSkHBug66yViI1sEozqnT6QzUnk2gM3jbbbcF4NWvfjUA119/fW+bT3ziEwDccccdwPy7jt1ul3vvvXeuD2NOWbp0aWP76na7Y1HTw6JyeshDHgLAypUrAXjoQx8KFKW08cYbA/CHP/wBgF//+tcA3Hzzzb19rVmzZsK+65b9hhtu2OShN9pHPT/vbY/Vc/DZsnr1aqDMjFTPeVTPtan2vfHGGw/83IuCCiGE0EqGUlB1i2q+WdhNMEq/xijaU6vqEY94BFCU04te9CIAPvWpT/W2nQtreYMNNmisTbvdLvfdd9+Ev9c3Nttss0b3N0yI/riwv3iuT3va0wA48MADgXLMt956K1D8SN/61rcA+OY3v9nb1+9//3ugv39qk002afTY165dO2sF5fk/7nGPA+DRj340UO716667DihKSX/zjTfeCMAPf/jD3r5GcY9Mt881a9YM3K+ioEIIIbSSoX1Qg4y4VYt4fbRiB2WUc/wmAj7qUY8C4PDDDwfgFa94BQA/+tGPADj//PN731F9jPOaNWmht9VnMk7++Mc/NravtWvXruOjqTJVMuko0X+hz+mxj30sUPq6/djt7BOqIaP+qvQrNjDV+c81++yzDwB77703UHxS9gHP+/bbbwfg2muvBeCqq67q7eOee+4BxnvPL168eOBZkyioEEIIrSQDVAghhFYykim+JuViXQpWwxObSvAchqanpKpO/SZw+sKgiIMPPhiAP//zPweKzD/66KOB4iSGMiUwTrlfr0k2X6jXI5S56JNVDDluAhPz+9FkQrTtaH+Yarq5/nuGURtObj/2fYMHZhKCP4qgqNneXx6TwSE77LADAJtvvjlQ+oC/Y3vcdtttAJx99tm9ff32t78FynNtHP23WpxgOqKgQgghtJKRJOo2gVZCPQmtatHceeedYzmWKptsskljVpWlZJpk++23B+D1r389UMLJ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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 92/100, d_loss=0.064, g_loss=0.066                                                                                                                      \n",
      "epoch = 93/100, d_loss=0.064, g_loss=0.096                                                                                                                      \n",
      "epoch = 94/100, d_loss=0.064, g_loss=0.143                                                                                                                      \n",
      "epoch = 95/100, d_loss=0.064, g_loss=0.206                                                                                                                      \n",
      "epoch = 96/100, d_loss=0.064, g_loss=0.198                                                                                                                      \n",
      "epoch = 97/100, d_loss=0.066, g_loss=0.066                                                                                                                      \n",
      "epoch = 98/100, d_loss=0.064, g_loss=0.113                                                                                                                      \n",
      "epoch = 99/100, d_loss=0.064, g_loss=0.094                                                                                                                      \n",
      "epoch = 100/100, d_loss=0.063, g_loss=0.200                                                                                                                      \n",
      "epoch = 101/100, d_loss=0.064, g_loss=0.115                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = 100\n",
    "batch_size = 64\n",
    "smooth = 0.1\n",
    "\n",
    "real = np.ones((batch_size, 4, 4, 1))\n",
    "real = real * (1 - smooth)\n",
    "fake = np.zeros((batch_size, 4, 4, 1))\n",
    "\n",
    "fake_labels = to_categorical(np.full((batch_size, 1), num_classes), num_classes=num_classes+1)\n",
    "\n",
    "d_loss = []\n",
    "d_g_loss = []\n",
    "\n",
    "for e in range(epochs + 1):\n",
    "    for i in range(len(X_train) // batch_size):\n",
    "        \n",
    "        # Train Discriminator weights\n",
    "        discriminator.trainable = True\n",
    "        \n",
    "        # Real samples\n",
    "        img_real = X_train[i*batch_size:(i+1)*batch_size]\n",
    "        real_labels = y_train[i*batch_size:(i+1)*batch_size]\n",
    "        \n",
    "        d_loss_real = discriminator.train_on_batch(x=img_real, y=[real, real_labels])\n",
    "        \n",
    "        # Fake Samples\n",
    "        masked_imgs = mask_randomly(img_real)\n",
    "        gen_imgs = generator.predict(masked_imgs)\n",
    "        \n",
    "        d_loss_fake = discriminator.train_on_batch(x=gen_imgs, y=[fake, fake_labels])\n",
    "         \n",
    "        # Discriminator loss\n",
    "        d_loss_batch = 0.5 * (d_loss_real[0] + d_loss_fake[0])\n",
    "        \n",
    "        # Train Generator weights\n",
    "        discriminator.trainable = False\n",
    "\n",
    "        d_g_loss_batch = d_g.train_on_batch(x=img_real, y=real)\n",
    "   \n",
    "        print(\n",
    "            'epoch = %d/%d, batch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, i, len(X_train) // batch_size, d_loss_batch, d_g_loss_batch[0]),\n",
    "            100*' ',\n",
    "            end='\\r'\n",
    "        )\n",
    "    \n",
    "    d_loss.append(d_loss_batch)\n",
    "    d_g_loss.append(d_g_loss_batch[0])\n",
    "    print('epoch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, d_loss[-1], d_g_loss[-1]), 100*' ')\n",
    "\n",
    "    if e % 10 == 0:\n",
    "        samples = 5\n",
    "        idx = np.random.randint(0, X_train.shape[0], samples)\n",
    "        masked_imgs = mask_randomly(X_train[idx])\n",
    "        x_fake = generator.predict(masked_imgs)\n",
    "\n",
    "        for k in range(samples):\n",
    "            # plot masked\n",
    "            plt.subplot(2, 5, k+1)\n",
    "            plt.imshow(masked_imgs[k].reshape(32, 32), cmap='gray')\n",
    "            plt.xticks([])\n",
    "            plt.yticks([])\n",
    "\n",
    "            # plot recontructed\n",
    "            plt.subplot(2, 5, k+6)\n",
    "            plt.imshow(x_fake[k].reshape(32, 32), cmap='gray')\n",
    "            plt.xticks([])\n",
    "            plt.yticks([])\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-06T22:11:27.495321Z",
     "start_time": "2018-08-06T22:11:27.332075Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plotting the metrics\n",
    "plt.plot(d_loss)\n",
    "plt.plot(d_g_loss)\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Discriminator', 'Adversarial'], loc='center right')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
